#include <iostream>
int GCD()
{
int a,b,k;
cout<<"Enter a and b"<<endl;
cin>>a>>b;
cout<<endl;
if (a>b)
{
k=a;
}
else
{
k=b;
}
cout<<k<<endl;
do
{
k=k-1;
} while(a%k !=0 && b%k !=0);
cout<<k<<endl;
return 0;
}
为什么这样的程序无法正常工作?例如,当我输入125且5时答案是25,但应该是5? while循环中的逻辑有问题吗?据我了解,问题在于模运算符。当k
击中25
时,表示125%25=0
和5%=25=0
。我该如何解决?
lower数字。当前,您开始使用较大的数字进行检查。您需要将if
块翻转到if (a<b)
。 (不完全是一个错误,但是您检查的数字超出了所需的数量)
do {} while()
时,您要检查的第一个数字是k-1
。请改用简单的while
。同样,循环条件也存在逻辑缺陷。while (!((a % k == 0) && (b % k == 0)))
{
k--;
}
请注意,模数周围的括号不是必需的,但是会稍微提高可读性。您的代码将不会在所有编译器中编译,并且您不应忽略名称空间
std::
。
while
语句有逻辑错误。必须是while(!(a%k == 0 && b%k == 0));
[当k
等于25时,125%25==0
因此,在您的while
语句中,a%k !=0
部分等于false,因此它退出您的do-while
,但需要测试b%k
是否等于0或不![此外,当
a
和b
大时,您的实现往往会执行缓慢。您可以看一下solutions。