求解最大公因数(网络空间安全概论)

文章介绍了如何用欧几里得算法编程计算两个整数的最大公因数(GCD),在初始使用int类型导致大数计算错误后,改为使用更大容量的数据类型并调整逻辑,解决了问题,最终实现正确计算大整数GCD的功能。
摘要由CSDN通过智能技术生成
  1. 题目描述

编写程序实现计算两个整数a 与 b 的最大公因数 d=(a,b),要求即使 a 与 b 中的一个等于零,程序也应该正常运行。用你编写的程序求解 GCD(1234,5678),GCD(16534528044,8332745927).

二、设计思路

利用辗转相除法实现。即用较小数除较大数,再用出现的第一个余数去除除数,再用出现的第二个余数去除第一个余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

欧几里得算法的原理如下:

三、运行结果

四、遇到的困难及解决办法

遇到的问题:

开始我写的代码如下图所示,用的变量是int型的,在运行GCD(1234,5678)结果是正确的,但是运行到GCD(16534528044,8332745927)时结果就错了!然后进行单步调试,发现a,b的值都是错的,就意识到int型变量是4个字节32位二进制数,它所能表示的最大整数是4294967295。后面就将变量改为了double类型的,但是double类型无法使用取余操作符,故后面更改代码。

后面又将代码改为下图所示

最终得到的结果总为0,后经过调试,当r=0后,后面的代码还会继续进行,也就是会将r=0的值赋给b,所以结果总为0;后将a=b,b=a的代码放在了r!=0的条件里执行,这样就不会出现上面的情况。

五、源程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值