帮我看下这个程序哪错了?c++得

来源:百度知道 编辑:UC知道 时间:2024/05/25 01:44:46
#include<iostream.h>
int gongyue(int x,int y);
void main()
{
int t;
int a,b;
cout<<"请输入两个数"<<endl;
cin>>a>>b;
if(a<b)
{
t=a;
a=b;
b=t;
}
cout<<a<<"和"<<b<<"的最大公约数是"<<gongyue(a,b)<<endl;

}

int gongyue(int x,int y)
{
while(x/y!=0)
{
y=x%y;
x=y;
}
return y;
}

这里x%y得出的结果有可能是0,当你再次进行x/y操作时就会出现除数是0的情况,所以就会出错。
下面给个正确的程序
#include <iostream>
using namespace std;
int GCD(int x,int y){
if(x%y==0)
return y;
return GCD(y,x%y);
}

int main(){
int x,y;
cin>>x>>y;
cout<<GCD(x,y);
return 0;
}

没有什么问题。交换数据,求公约数。很好呀。

求公约函数出错
用递归
看下这函数
int gcd(int a, int b)
{
if (b == 0)
{
return a;
}
else
{
return gcd(b, a % b);
}
}

错误在于,你的while判断条件是x/y!=0,但是你想过没有,y=x%y; 其中如果x和y可以正处,余数就是零,这样y就可能是0,所以出现严重错误。