辗转相除法求最大公约数

这是一篇在做辗转相除法求最大公约数的编程题时发现错误并解决错误的心得体会。

     我真的很开心,因为我解决了自己创造的问题。很多朋友都知道辗转相除法的原理,不过还是有一些朋友不太了解,我在这里解释一下:就是给定的两个数,以小数除大数,(注意除以和除,除数和被除数的概念)如果能整除,那么小数就是所求的最大公约数。否则,就用余数来除刚才的除数。以此类推,直到一个出发能够整除,这时作为除数的那个数就是所求的最大公约数。我的程序首先将两个给定的数排序,大的放在前面,小的放在后面,这样子方便后面的辗转相除。根据原理,我在纸上写写画画,才算是写出这部分,只是rem = num1%num2;这一句当时我写的是rem = num1/num2;检查了好久毫无头绪,所以决定上网查一查,这一查就豁然开朗了,原来就是这样一个小小的问题,/和%因为粗心没有区分开,虽然问题不大,但是它却卡了我很久很久,快抓破了头皮,怎么查都没有逻辑错误,调试时也会显示结果,只是显示的结果很怪异。所以这就是一个程序小白的初期,很多基础只是不牢固,也很粗心,不过我相信以后我会越来越细心的,尽量不犯这种错误。

#include<stdio.h>
#include<stdlib.h>
//#include<math.h>
int main()
{
int num1=585, num2=657;
int rem ;
printf("%d %d\n", num1, num2);
if (num1 > num2)
{
num1 = num1;
num2 = num2;
}
else
{
num2 = num1 + num2;
num1 = num2 - num1;
num2 = num2 - num1;
}
printf("%d %d\n", num1, num2);
while (num1%num2 != 0)
{
rem = num1%num2;
num1 = num2;
num2 = rem;
}
printf("最大公约数是%d\n",num2);
system("pause");
return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值