Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;计算最大公约数的程序_C++_Function_Greatest Common Divisor - Fatal编程技术网

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);
}