题目描述
输入两个大整数a,b,输出他们的和。(1<=a,b<=10^100)
输入格式
输入两个大整数a,b。 (1<=a,b<10^100)
输出格式
输出a加b的和。
输入样例 #1
43434343445435343 32435647668754353
输出样例 #2
75869991114189696
分析:
咋样,看完这题就问你闷不闷。
刚开时作者也闷了,因为刚开始我以为这不过就a+b吗,新手都会写,但直到我(1<=a,b<10^100),作者傻了,不管是什么整数类型都没有那么大。
在座的各位肯定会加法竖式,举个例子,199+23,列个竖式
1 9 9
+ 2 3
2 2 2
那怎么办?输入都解决不了,怎么做加法?输入可以用char类型读入,在用两个数组存成int类型,但用char读入时不是这样的,而是
199
23
这并不能直接做加法,那我们将char转int时倒着存就行了,然后做加法,但别忘了进位 (至于代码,暂时保密)
因为我们是倒着加的,输出时就要倒着输。
代码不就出来了。
代码:
#include <bits/stdc++.h>
using namespace std;
char aa[1010],bb[1010];//输入用的字符串数组
int a[1010],b[1010],c[2010];//a,b是用来存转换过来的数字,c是和
int main()
{
memset(c,0,sizeof(c));//清空存和的数组
cin>>aa>>bb;
int la=strlen(aa);
int lb=strlen(bb);//la,lb是长度
int lc=0;
if(la>lb) lc=la;
else lc=lb;//和的长度等于大的一边,有进位会判断
for(int i=0;i<la;i++) a[i+1]=aa[la-i-1]-'0';
for(int i=0;i<lb;i++) b[i+1]=bb[lb-i-1]-'0';//将char倒着存入int的数组里
for(int i=1;i<=lc;i++)
{
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/10;//第i+1位加上第i位除以10的商
c[i]%=10;//去掉进位的部分
}
while (c[lc+1]>0)//如果lc+1项有进位
{
lc++;
c[lc+1]=c[lc]/10;
c[lc]=c[lc]%10;
}
for(int i=lc;i>=1;i--)//倒着输出
cout<<c[i];
return 0;
}
别抄,我相信你能做出来。
希望对你有帮助!!
有问题在评论区讨论。
验证方法:洛谷P1601 A+B Problem(高精),直接交,能AC。