#include<stdio.h>
int gcd(int x,int y){
if(y==0)
return x;
else
return (y,x%y);
}
int main(){
int a,b,c;
scanf("%d %d",&a,&b);
if(a>b){
c=a;
a=b;
b=c;
}
printf("%d\n",gcd(a,b));
return 0;
}
修改见注释,供参考:
#include<stdio.h>
int gcd(int x,int y){
if(y==0)
return x;
else
return gcd(y,x%y); //修改
}
int main(){
int a,b,c;
scanf("%d %d",&a,&b);
if(a<b){ //修改
c=a;
a=b;
b=c;
}
printf("%d\n",gcd(a,b));
return 0;
}
if(a>b){
改为
if(a<b){
大小弄反了
应该采用递归的形式,gcd返回值是gcd(y, x%y)
求公约数的方法错了,改成下面这样:
#include<stdio.h>
int gcd(int x,int y){
for(int i=x;i>0;i--)
{
if(x%i==0&&y%i==0){
return i;
}
}
}
int main(){
int a,b,c;
scanf("%d %d",&a,&b);
if(a>b){
c=a;
a=b;
b=c;
}
printf("%d\n",gcd(a,b));
return 0;
}
因为辗转相除法是小数除大数
if(a>b)改为 if(a<b)即可。
scanf("%d %d",&a,&b);其实也建议改一下,改成scanf("%d%d",&a,&b);
如果不改,就会每次输入a之后必须要输入一个空格才能正常输入b
希望对题主有所帮助,望采纳!!