我已经启动了这个程序来计算最大的公约数。这就是我到目前为止所做的:
#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;
}
GCD总是得到0。我做错了什么?
答案 0 :(得分:2)
你应该循环找到这个,如果你用一些方程式,你的算法应该如何工作,它可能会有所帮助。
但是你看到了两个问题,除非你在另一个循环中调用它。
你在两种情况下都会回来,无论是if还是其他,所以你只能在这里过一次。
此外,这部分没有意义,为什么在执行b
之后修改return
值?
return b;
b = b%a;
你应该为此使用递归,顺便说一句。
http://rosettacode.org/wiki/Greatest_common_divisor#Recursive_Euclid_algorithm
答案 1 :(得分:2)
int getGCD(int a, int b) {
//这里我们需要检查b == 0是否返回
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
Euclid的算法实现