江湖散人 发表于 2021-6-9 20:56:47

最大公约数问题

def gcd(a, b):
    if b > a:#
      a, b = b, a# b为最小值
    if a%b == 0:# 判断b是否是最大公约数
      return b
    for i in range(b//2+1, 1, -1):#倒叙求最大公约数更快
      if a%i == 0 and b%i == 0:
            return i
    return 0

while True:
    a = int(input('请输入第一个数: '))
    b = int(input('请输入第二个数: '))
    print('最大公约数是:', gcd(a, b))
    c = input('还要继续操作吗?q: ')
    if c == 'q':
      break
    else:
      continue



这是一个求两个数最大公约数的程序,里边有两点不明白。
1.if b > a:#
      a, b = b, a# b为最小值
        这句是什么意思?为什么这么做?
2. return 0 这里返回0是什么意思啊?

wp231957 发表于 2021-6-9 21:20:03

第一个就是确保较大的数在第一个参数那里,较小的数在第二个参数那里

第二个return 0是问题代码,0不可能作为公约数

江湖散人 发表于 2021-6-9 21:47:48

wp231957 发表于 2021-6-9 21:20
第一个就是确保较大的数在第一个参数那里,较小的数在第二个参数那里

第二个return 0是问题代码,0不可 ...

.if b > a:   a, b = b, a 这个做法就是为了继续执行if a%b == 0:   return b 做准备的吧。
return 0 是不是可以认为一旦返回了0,那么就说明程序有问题,是吗?

wp231957 发表于 2021-6-9 21:50:01

江湖散人 发表于 2021-6-9 21:47
.if b > a:   a, b = b, a 这个做法就是为了继续执行if a%b == 0:   return b 做准备的吧。
return 0...

多测试一些案例,你就知道原代码是否正确
页: [1]
查看完整版本: 最大公约数问题