C语言题目:写一个函数,用欧几里德辗转相除法求两个整数的最大公约数

2024-11-27 06:17:31
推荐回答(3个)
回答1:

你的程序中,如果一个数是另一个数的倍数的话,那么d不会被赋值,这是输出的d的值是不可预知的,可将d的值初始化为较小数的值。其次,你的func函数没有返回值。

#include
#include

int num,arr[100];

int get_max(int a,int b)
{
int x,y,ans1,ans2;
x=a;y=b;
while(x%y)
{
ans1=x%y;
ans2=ans1-y;
x=y;
if(ans1<(-ans2))
y=ans1;
else
y=-ans2;
}
return y;
}

int main()
{
int ans;
printf("请输入整数的个数:");
scanf("%d",&num);
if(num<2||num>100)
{
printf("非法输入!\n");
exit(1);
}
for(int i=0;i scanf("%d",&arr[i]);
ans=get_max(arr[0],arr[1]);
for(i=2;i ans=get_max(ans,arr[i]);
printf("(%d",arr[0]);
for(i=1;i printf(",%d",arr[i]);
printf(")=%d\n",ans);
return 0;
}

回答2:

#include
int func(int a,int b);
int main(void){
int i,j;
scanf("%d%d",&i,&j);
func(i,j);
return 0;
}
int func(int a,int b) {
int i,j,c;
if(a>b) i=a,j=b;
else i=b,j=a;
c=i%j;
while(c!=0){
i=j;
j=c;
c=i%j;
}
printf("%d",j);
}

回答3:

不需要判断a,b的大小:http://zhidao.baidu.com/link?url=-dEdv1YRmAQVKWoaZt-Q1ZTKMGkjUeMtflDOGEZu-7KXV_cYCOt2vDzEb-l0EhELyWdFySSCgfoIpOk-J2VPla