用“辗转相除法”求最大公约数

来源:互联网 发布:马原人工智能与意识 编辑:程序博客网 时间:2024/06/12 01:01

用“辗转相除法”求最大公约数

#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就行。

反思:

做错的根源是:没有好好的手写程序运算过程。


以后不能偷懒,要在纸上写好程序的运算过程。


0 0