AC日记——大整数加法 openjudge 1.6 10

时间:2024-01-10 22:32:50

10:大整数加法

总时间限制: 
1000ms

内存限制: 
65536kB
描述

求两个不超过200位的非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
来源
程序设计实习2007

思路:

  模拟;

来,上代码:

#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; char s1[],s2[]; void exchange()
{
int l,r;
l=,r=strlen(s1)-;
while(r>l)
{
if(s1[l]>='') s1[l]-='';
if(s1[r]>='') s1[r]-='';
swap(s1[l],s1[r]);
l++,r--;
}
if(l==r) s1[l]-='';
l=,r=strlen(s2)-;
while(r>l)
{
if(s2[l]>='') s2[l]-='';
if(s2[r]>='') s2[r]-='';
swap(s2[l],s2[r]);
l++,r--;
}
if(l==r) s2[l]-='';
} int main()
{
cin>>s1;
cin>>s2;
exchange();
for(int i=;i<=;i++)
{
s1[i]+=s2[i];
if(s1[i]>) s1[i+]+=s1[i]/;
s1[i]%=;
}
bool if_zero=true;
for(int i=;i>=;i--)
{
if(s1[i]==) continue;
for(int j=i;j>=;j--) putchar(s1[j]+'');
if_zero=false;
break;
}
if(if_zero) putchar('');
return ;
}