利用数组实现大整数存储

在visual c中一个int型的范围是-32768~32767 double型是-2147483648~2147483647,如果超出这个范围的数用这些类型来存储会造成数据的溢出,那如何解决这个问题呢?由于每个数字都是由每一位组成的,那么既然存储不了这么大的数据,不如存储它每一位的数字,那么数组就解决了这个问题!

首先来分析这个算法!

由于数组可以选择按顺序存储(0~N-1)也可以选择逆序存储(N-1~0),由于是按位存储的,所以这里我们选择逆序存储,因为是计算幂所以需要定义数组的最后一个元素为1!

示意图如下所示:


要计算13的100次方肯定要架个循环,所以一定要有循环终止条件(这个是该问题中最重要的一部分),我们来模拟一下前三次循环!嘿嘿!

看到这里我们看到了什么呢?嘿嘿,循环体出来了!接下来就是写代码了!

我我们运行一下看一下结果!


这是怎么回事呢?我们来分析一下!这个输出结果出现了负数,但是每一位都是正数不可能出现负数,所以应该是数据溢出了,数据存储的时候只会出现在a[j]=x%10和a[i--]=cp,这里就很明了,前者每次存储一位,所以后者出现了问题,因为cp=x/10,总会导致有一个数组元素存储大于一位的数字,大于一位的数字再乘以13就会导致最后数据一定溢出!所以修改代码如下:


再加个while循环就可以解决这个问题了!我们再来看看这个输出结果!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值