http://noi.openjudge.cn/ch0106/10/
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
代码
#include<bits/stdc++.h>
using namespace std;
int x[250],y[250];
int main()
{
string a,b;
int la,lb,l;
getline(cin,a);
getline(cin,b);//读入;
la=a.size();
lb=b.size();
l=max(la,lb);//l是两数和的最大位数;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());//倒序存储,有助于对其个位 ;
for(int i=0; i<la; i++)
x[i]=a[i]-'0';
for(int i=0; i<lb; i++)
y[i]=b[i]-'0';//数字存储;
for(int i=0; i<l; i++)
{
x[i]+=y[i];//对位相加;
if(x[i]>=10)
{
x[i+1]++;
x[i]-=10;
}//处理进位,只需考虑和大于等于十的情况;
}
while(x[l]==0&&l>=1) //和有可能为0,也要输出;
l--;//处理和的首位为0的情况:两个加数开头可以有0;
for(int i=l; i>=0; i--)
cout<<x[i];//逆序输出;
return 0;
}