本帖最后由 jackz007 于 2023-10-22 12:34 编辑
这两句犯冲 这两句在 a > b 的时候不会起作用,而在 a < b 时, 执行完第 1 句 b 会变成 a,于是,b 是 a,a 还是 a,两个变量数值相同,第 2 句自然就废掉了,因为执行完第 2 句,变量 a 和 b 都会变成先前变量 a 的数值。
这 2 句就是想确保 a 大 b 小,以便在 a < b 的时候对 a、b 的数值进行交换,其实,辗转相除法并不需要这样做。
请试试下面的代码:#include<iostream>
using namespace std ;
int main()
{
int a , b , c , d ;
cin >> a >> b ;
c = a * b ;
while(b) {
d = a % b ;
a = b ;
b = d ;
}
cout<<"最大公约数为" << a << endl ;
cout<<"最小公倍数为" << c / a << endl ;
return 0 ;
}
编译、运行实况:D:\[exercise]\C>g++ -o x x.c
D:\[exercise]\C>x
26
39
最大公约数为13
最小公倍数为78
D:\[exercise]\C>x
39
26
最大公约数为13
最小公倍数为78
D:\[exercise]\C>
|