大整数加法可谓是学习C++语言的一个里程碑。那么,如何在C++简单易懂地实现大整数加法呢?
概念思路
假定这两个十进制的大整数位数不超过255位。
那么,可以定义两个长度为255的字符数组(num1,num2),以换行符作为分界线,依次读入。
最后,从两个数组的最后一位开始,一位位地向前相加,进位,直到两个数组都被读完或一个数组被读完(此时,更长的一个数组剩下的数字直接输出)。
例如:
num1[5]={'1','2','3','4','5'};
num2[5]={'2','3','4','5','6'};
定义减数i=0,while(i<=strlen(num1)&&i<=strlen(num2))时,对[长度-i-1]所对应的那一个数字进行操作。
如果,两数长度不一的话:
num1[5]={'1','2','3','4','5'};
num2[2]={'5','6'};
那么在i=3的时候,i<strlen(num2)将为false,跳出循环。
字符的相加
先来了解一下二字符相加的结果(ASCII码,已知者可跳过)。
不仅是在C++中,每个字符在ASCII下都对应着一个数字。比如说,97表示'a',65表示'A',48表示'0'。
在本例中,用到的是字符'0'-'9',对应的数字也就是48-57。
若有两个字符a和b,a='0',b='0',
那么,a+b返回的结果就是48+48=96(因为'0'是48)。若想使结果的ASCII总和就是数字之和,那么显而易见,应该再减去96。
在这个操作后,
'9'+'0'=57+48=105,减去96就是9,即9+0;
<