橙白oj:最大公约数和最小公倍数
下图为错误代码:
n=int(input())
while n:
i,j=[int(x) for x in input().split()]
if j>i:
i,j=j,i
c,d=i,j
while i%j:
y=i%j
j=y
i=j
print(j,int((c*d)/j))
n=n-1
错误原因分析:
j=y
i=j
这两行代码的意思并不是我们所希望的将y的值赋给j,然后将j的初始值,就是y没有赋值给j之前的原本值再赋值给i,而是将y的值先赋给j,然后再赋给i,最后i和j都等于y,所以这是错误的
这个题给我的思维是 如果赋值时一定要注意赋给值的那几个变量之间的关系。
而这道题的最终答案也只是把这两行代码改一下变为 i,j=j,y 这样就达到我们的目的了,将y赋给j,j的初始值赋给i。
正确代码
n=int(input())
while n:
i,j=[int(x) for x in input().split()]
if j>i:
i,j=j,i
c,d=i,j
while i%j:
y=i%j
i,j=j,y
print(j,int((c*d)/j))
n=n-1