利用数组实现大整数存储

在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循环就可以解决这个问题了!我们再来看看这个输出结果!

 

《利用数组实现大整数存储》

点赞