c ++最大公约数

Dav*_*ane 4 c++ algorithm do-while modulus

我是C++的新手,我正在尝试创建一个函数来实现欧几里德算法,该算法返回两个整数输入的最大公约数.

我正在采取的当前方法一直在崩溃 - 你能帮助我理解为什么吗?

int main() {    
    int a = 0;
    int b = 0;

    cin >>  a;
    cin >> b;

    do {
        if ( a > b ) a = a % b;
        else if ( a < b ) b = b % a;
        else if ( a == b ) break;
    } while ( ( a || b ) != 0 ); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

大卫

Arm*_*yan 9

while ( ( a || b ) != 0 ); 
Run Code Online (Sandbox Code Playgroud)

这是错的.它应该是

while ( a != 0 && b != 0 ); 
Run Code Online (Sandbox Code Playgroud)

另外,Euclid的算法可以递归地简洁地实现:

int gcd(int a, int b)
{
   return b == 0 ? a : gcd(b, a%b);
}
Run Code Online (Sandbox Code Playgroud)