求助,请问为什么输出的结果总是1?
def gcd(x,y):if x > y:
pass
else:
x,y = y,x
r = x % y
if r == 0:
print (y)
else:
while r != 0:
x = r; r = y % r
if r == 0:
break
else:
r = x % r
print(x)
gcd(47,7)
第一个if用来确定大/小的余数,然后第二个if用来判断余数是否为0,为0就显示小的,否则开始辗转相除{:10_284:},结果输出都是1{:10_266:} 47和7的最大因数是1啊 cloudfox 发表于 2020-8-22 12:06
第一个if用来确定大/小的余数,然后第二个if用来判断余数是否为0,为0就显示小的,否则开始辗转相除{:10_28 ...
你换成49和7 1q23w31 发表于 2020-8-22 12:10
47和7的最大因数是1啊
突然窒息{:10_285:} 1q23w31 发表于 2020-8-22 12:10
你换成49和7
谢谢{:10_247:} 第一,并不是输出结果一直为1,是因为你输入的是47和7,这俩数的最大公约数就是1
第二,你的程序在逻辑上是不对的。一开始是x对y求余,后面又变成了y对x求余,而却y一直没有变过。这样出来的结果是不对的。例如:gcd(16,28)输出的结果是12
正确的程序如下:
def gcd(x,y):
if x <y:
x,y = y,x
r = x % y
while r != 0:
x = y
y = r
r = x % y
print(y)
其实,根本不用判断x和y的大小,直接辗转相除就可以了,最多是多除一次
def gcd(x, y):
while y != 0:
c = x % y
x = y
y = c
print(x) sunrise085 发表于 2020-8-22 12:23
第一,并不是输出结果一直为1,是因为你输入的是47和7,这俩数的最大公约数就是1
第二,你的程序在逻辑上 ...
谢谢!{:5_108:}!!!{:10_254:} cloudfox 发表于 2020-8-22 12:31
谢谢!!!!
你这最佳选的有点快了啊。。。
页:
[1]