C++求最大公约数,请问错误在哪...谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/22 15:56:27
用两种方法求的,可是得的结果却是非常大,8位数,很奇怪,却不知道错在哪...用的是DEV-C++...

#include<iostream.h>
#include<process.h>

int gcd1(int m,int n)
{
if(m==n)
return m;
else
if(m>n)
gcd1(m-n,n);
else
gcd1(m,n-m);
}

int gcd2(int m,int n)
{
if(m%n==0)
return n;
else
gcd2(n,m%n);
}

int main()
{
int a,b;
cout<<"请输入两个非负整数:";
cin>>a>>b;
cout<<gcd1(a,b)<<endl;
cout<<gcd2(a,b)<<endl;
system("pause");
}

编译通过了,就是运行程序得的结果是不对的,比如输入8和3,结果却是个8位数...
补充一下,这道题目要求用递归函数...

再补充一下,我知道哪出问题了,在gcd1和gcd2两个函数里,必须加上return,比如if(m>n) gcd1(m-n,n);要改成if(m>n) return gcd1(m-n,n);就行了,然后我又在VC里试了下,发现在VC里不需要加return也可以执行正确的结果,在DEV-C++里就不行,有人能告诉我为什么么......

我用vc 试了一下 程序是没有问题的 可能是DEV-C++编译器的问题
你试着给a,b赋个初始值看看

int hcf(int u,int v) /*定义函数hcf,求两个整数u,v的最大公约数*/
{
int t,r; /*定义两个变量t,r*/
if(v>u) /*判断如果v>u,将两者互换,使终使u>v*/
{
t=u;
u=v;
v=t;
}

while( (r=u%v)!=0) /*循环求余,如果余数不等于,则u=v,v=r*/
{
u=v;
v=r;
}

return v; /*返回当前最大公约数*/
}

不知道你是用什么编译器的,我用VC测试了下你的程序是对的,你可以用下面的方法再试试...

//递归实现

int gcd(int m,int n)

{

if (m < n)

{

int tmp = m;

m = n;

n = tmp;

}

if (n == 0)

return m;

else

return gcd(n,m % n);

}

//非递归实现

int gcd2(int m,int n)

{

if (m < n)

{

int tmp = m;

m = n;