写在前面:
大整数相加是很久之前写的,最近又写了大整数相乘,都不难,总结一下吧。
如果以后写了大整数相除也会补充进来的。
众所周知,int型的范围为:-2147483648 ~ +2147483647
long long in型的范围为:-9223372036854775808 ~ +9223372036854775807
在现在这个大数据横行的时代,有些非常大的数据根本不够。
所以我们需要进行数据很大的计算,简要思路就是:用字符串做运算。
大整数相加
大数相加是大数运算的基础,理解这个,理解其他就不难了。
我们在运算时,采用列竖式的方式,回忆一下,我们在小学时学习列竖式的时候:将个位与个位相加,大于10就进位,
再十位与十位相加,再进位。从低位开始,相同位数相加,多于10的进位,这就是基本思想。
就像这样:
我们不难发现,这种方法无疑就分为两步:
1.从最低位开始,先将同级位数对应相加。
2.判断是否需要定位,从低位开始往前一位进位。
(或者全部相加完再进位也可以)
相加这步很简单,而通过上面的例子我们发现进位也很简单,因为个位数和个位数相加是不超过20的,所以进位也就是说如果当前位数的值大于10,需要进位,便对10取余,然后前一位数加1便可。
我们通过代码来分析:
首先定义3个字符串数组,分别用来存储需要相加的两个值和最后结果,并对结果字符串初始化:
//#define N 200 //N自行设置
char a[N];
char b[N];
char s[N]; //结果数组
for(int i=0;i<N;i++) //初始化,一定要
{
s[i]=0;
}
cin>>a;
cin>>b;
然后就是将其从个位数字开始对应相加,因为要从个位数字开始,所以字符串要倒着开始遍历:
int la=strlen(a)-1,lb=strlen(b)-1;
int k=N-1;
while(la>=0 &&