大数的加减法/字符数组转为数字数组

题目描述
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,计算完之后,输出的时候在从末尾输出,这样就解决了问题。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值