C++ C++;计算最大公约数的程序
我启动了这个程序来计算最大公约数。这就是我到目前为止所做的:C++ C++;计算最大公约数的程序,c++,function,greatest-common-divisor,C++,Function,Greatest Common Divisor,我启动了这个程序来计算最大公约数。这就是我到目前为止所做的: #include <iostream> #include <math.h> using namespace std; int getGCD(int a, int b) { a = a % b; if (a == 0) { return b; b = b % a; } if (b == 0) { return a;
#include <iostream>
#include <math.h>
using namespace std;
int getGCD(int a, int b)
{
a = a % b;
if (a == 0)
{
return b;
b = b % a;
}
if (b == 0)
{
return a;
}
}
int main()
{
int x, y;
cout << "Please enter two integers x and y, for GCD calculation" << endl;
cin >> x >> y;
cout << "The GCD of " << x << "and " << y << " is" << getGCD(x, y) << endl;
return 0;
}
#包括
#包括
使用名称空间std;
int getGCD(int a,int b)
{
a=a%b;
如果(a==0)
{
返回b;
b=b%a;
}
如果(b==0)
{
返回a;
}
}
int main()
{
int x,y;
cout x>>y;
cout你应该通过循环找到这个,如果你用一些方程,你的算法来说明这个应该如何工作,这可能会有所帮助
但我看到有两个问题,除非你在另一个循环中调用它
在这两种情况下,无论是if还是else,您都会返回,因此您只能通过这里一次
同样,这部分也没有意义,为什么在执行返回后修改b
值
return b;
b = b%a;
顺便说一句,你应该使用递归
//这里我们需要检查b==0是否返回a
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
Euclid的算法实现b=b%a;永远不会执行检查行返回b;问问自己,如果您之前告诉程序退出此函数,程序如何执行b=b%a;如果这是作业,您应该添加适当的标记:)为了好玩,请参阅编译时评估的GCD算法(使用模板):您的函数总是声称在一次调用后返回正确的结果,这一事实应该表明存在错误。递归不应用于此目的。找到GCD的迭代对于欧几里德来说已经足够好了(约公元前300年的元素,第七卷,命题1和命题2),这对您来说已经足够好了。@我相信递归是一个更简单的解决方案,但是,最终它取决于OP想要做什么,我只是给出了我的意见,并提供了一个指向源代码的链接来帮助您。控件可能会到达非void函数的末尾。行b=a%b应该是a=a%b,反之亦然
if (b == 0) {
return a;
}
return gcd(b, a % b);
}