用“辗转相除法”求最大公约数
#include<stdio.h>//辗转相除法求最大公约数
int main()
{
int a,b,temp;
printf("请输入a:");
scanf("%d",&a);
fflush(stdin);
printf("请输入b:");
scanf("%d",&b);
fflush(stdin);
printf("调整好顺序前:a=%d,b=%d\n",a,b);
if(a<b)
{
temp=a;
a=b;
b=temp;
}
printf("调整好顺序后:a=%d,b=%d\n",a,b);
while(temp!=0)//temp用来存放余数
{
temp=a%b;
if(temp==0)break;//当余数为0时,不再进行下一步的赋值跳出循环
a=b;
b=temp;
}
printf("最大公约数为:%d\n\n",b);
return 0;
}
看书后更改为:
#include<stdio.h>
int main()
{
int m,n,temp,r;
printf("请输入两个正整数m,n:");
scanf("%d,%d",&m,&n);
if(m<n)//把大的数放入m,小的放入n
{
temp=m;
m=n;
n=temp;
}
printf("排序后:m=%d,n=%d\n",m,n);
while(n!=0)//求最大公约数
{
r=m%n;
m=n;
n=r;
}
printf("最大公约数为:%d\n",m);
return 0;
}
最后理解了,根据我的算法,更改为:
#include<stdio.h>//辗转相除法求最大公约数
int main()
{
int a,b,temp;
printf("请输入a:");
scanf("%d",&a);
fflush(stdin);
printf("请输入b:");
scanf("%d",&b);
fflush(stdin);
printf("调整好顺序前:a=%d,b=%d\n",a,b);
if(a<b)
{
temp=a;
a=b;
b=temp;
}
printf("调整好顺序后:a=%d,b=%d\n",a,b);
while(temp!=0)//temp用来存放余数
{
temp=a%b;
//if(temp==0)break;//当余数为0时,不再进行下一步的赋值跳出循环
a=b;
b=temp;
}
printf("最大公约数为:%d\n\n",a);
return 0;
}
把这一行注释掉:
//if(temp==0)break;//当余数为0时,不再进行下一步的赋值跳出循环
后输出a就行。
反思:
做错的根源是:没有好好的手写程序运算过程。
以后不能偷懒,要在纸上写好程序的运算过程。