[题目描述]
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=220;
const int maxn=200;
void clear(int a[])
{
for(int i=0;i<=maxn;i++)a[i]=0;
}
void read(int a[])
{
static char s[N];
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++)a[len-i-1]=s[i]-'0';
}
void print(int a[])
{
int i;
for(i=maxn;i>=1;i--)
{
if(a[i]!=0)break;
}
for(;i>=0;i--)cout<<a[i];
cout<<'\n';
}
void add(int a[],int b[],int c[])
{
clear(c);
for(int i=0;i<=maxn;i++)
{
c[i]+=a[i]+b[i];
if(c[i]>=10)
{
c[i+1]++;
c[i]-=10;
}
}
}
int a[N],b[N],c[N];
int main()
{
read(a),read(b);
add(a,b,c);
print(c);
}
题解:这段代码是一个简单的大整数加法程序。它定义了一些常量、变量和函数。
首先,它定义了常量N和maxn分别表示数组的大小。数组a、b和c分别用来存储两个大整数和它们的和。函数clear用来将数组清零,函数read用来读入大整数,函数print用来输出大整数。函数add用来将两个大整数相加并保存到第三个数组中。
在主函数中,首先调用read函数读入两个大整数a和b,再调用add函数将它们相加并保存到数组c中,最后调用print函数输出结果。
这段代码的思路很简单,就是将两个大整数的每一位依次相加,处理进位。然后输出结果。