问题遇到的现象和发生背景
10:大整数加法
总时间限制: 1000ms 内存限制: 65536kB
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
来源
程序设计实习2007
问题相关代码,请勿粘贴截图
#include<bits/stdc++.h>
using namespace std;
int main()
{
string az,bz;
cin>>az>>bz;
int a[strlen(az.c_str())],b[strlen(bz.c_str())];
for(int i=0;i<strlen(az.c_str());i++)
{
a[i]=az[i]-'0';
}
for(int i=0;i<strlen(bz.c_str());i++)
{
b[i]=bz[i]-'0';
}
int g=strlen(az.c_str())>=strlen(bz.c_str())?strlen(az.c_str()):strlen(bz.c_str());
int h[g+1];
memset(h,0,sizeof(h));
for(int i=0;i<=g;i++)
{
if(a[i]+b[i]>=10)
{
h[i+1]+=1;
h[i]+=(a[i]+b[i])%10;
}
else
{
h[i]=a[i]+b[i];
}
}
bool l=false;
int i;
for(i=200;i>=0;i--)
{
if(h[i]!=0)
l=true;
if(l==true)
cout<<h[i];
}
return 0;
}
运行结果及报错内容
输入:
22222222222222222222
33333333333333333333
输出:
199323377300000000000419969100000000000030975721-744678956000000000000000000000000000000051334240250004199348000000010116816016025011151677721621202016019022929920190229291220101144880200229281632896508421504500300200101147843355443858993459030020010115936000200002000020000202222222222222222222233333333333333333333049164481255555555555555555555
我想要达到的结果
输入:
22222222222222222222
33333333333333333333
输出:
55555555555555555555