最大公约数我这样求怎么不行啊?

来源:百度知道 编辑:UC知道 时间:2024/05/05 21:52:38
#include<iostream.h>
gbs(int x,int y)
{int m,n;
m=(x<y?x:y), n=(x>y?x:y);
int b;
b=n%m;
if(b==0)cout<<m;
else m=b,n=m,gbs(n,m);
}

void main(void)
{for(;1;){int x,y;
cout<<"输入两个数:";
cin>>x>>y;
gbs(x,y);
}
}

else m=b,n=m,gbs(n,m);

这句错了

这句将导致n=m,自己看看是不

应该将m=b和n=m顺序对调

else 后面的m=b,n=m,顺序错了,应该为:n=m,m=b,

其实求最大公约数这个算法比较好:
int Gcd(int x,int y)
{
if(x%y==0)
return x;
return(y,x%y);
}

你写那个gbs方法,还要判断大小,还需要三个临时变量,
从空间,时间考虑都不值得....

else后面的 m=b,n=m,顺序错了,m=b已经把m赋值为b了,再n=m,就产生错误了,这时候n也是b的值了.
所以应该改为:n=m,m=b

其实求最大公约数这个算法比较好:
int Gcd(int a,int b)
{
if(a%b==0)
return a;
return(b,a%b);
}

你写那个还要比较大小,还需要三个临时变量...