为什么它没有向我显示最大的公约数?

时间:2014-11-23 14:26:19

标签: c++

当我尝试启动程序时它不起作用并且没有向我显示任何错误。为什么呢?

#include <iostream>

using namespace std;

int main()
{
    unsigned a,b;
    cout<<"a=";
    cin>>a;
    cout<<"b=";
    cin>>b;
    {
        while(a!=b)
        {
            if(a>b)
                (a==a-b);
            else
                (b==b-a);
        }
    }
    cout<<"cmmdc=",a;
    return 0;
}

3 个答案:

答案 0 :(得分:3)

a==a-b替换为a=a-b

b==b-a替换为b=b-a

运算符==是比较,它不会修改其参数。运算符=是赋值,它将其左参数修改为其右参数的值。

cout<<"cmmdc=",a替换为cout<<"cmmdc="<<a,否则将不会打印a

答案 1 :(得分:0)

即使将==更改为= s,如果ab中的任何一个而不是{0}}都为0,您将获得无限循环。那,改为使用这个循环:

while (b != 0) {
  const unsigned olda = a;
  a = b;
  b = olda % b;
}
// GCD is now in a.

答案 2 :(得分:0)

找到两个数字的gcd是最简单的方法:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a,b;
    cout<<"a = ";
    cin>>a;
    cout<<"b = ";
    cin>>b;
    cout<<"GCD = " << __gcd(a,b);
}