题目描述
a+b
输入
一个 m 代表多少组数据
每组两个数a b,空格隔开,每个数小于1000位
输出
a+b的和。。并换行。
样例输入
5
123456 123456
654321 654321
987654321123456789 987654321123456789
111111111111111111111111111111111111112222222222222222222222222222222333333333333333333333
9999999999999999999999999999999998888888888888888888888887777777777777777777777777777777
111111111 111111111111
样例输出
246912
1308642
1975308642246913578
121111111111111111111111111111111110001111111111111111111110000000000111111111111111111110
111222222222
题中给出的数明显超出了long long int 的范围,所以我们需要把这个数存到字符数组中去(存到数字数组中在读取时会发生错误),再一个一个的转到一个新的数字数组中。
我们知道,字符‘0’的ASCII码值是48,‘9’的ASCii值是57,我们在把其转为数字数组中时要注意这一点,所以,我们可以在转化的过程中减去字符‘0’的ASCii值,这样就得到了真正的数值,
在这里我写一个简单的代码
int i,j,a[10000];
char m[10000];
scanf("%s",&m); //这里不能用gets ,因为把空格也计入在字符数组中去。
for(i=0;i<10000;i++)
{
a[i]=m[i]-'0'; //转换
}
因为是两个大数相加,所以我们要把两个大数中小的那个缺的位用0补,我们知道加减都是从低位开始计算,所以如何把0补在前面呢?
我在这里觉得可以在转换时,字符数组从第一位开始转换,数字数组从最后位开始接受,这样就把整个数倒了过来,或者在转换之后再倒一下,把数组倒过来之后从第一位开始计算,满10进1,计算完之后,输出的时候在从末尾输出,这样就解决了问题。