总时间限制:
1000ms
内存限制:
65536kB
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
分析及代码:[作者:徐琰]:
分析:大整数加法只需要一开始输入字符串,然后用数组倒序表示每一位的数值,每一位进行相加,用数组flag表示进位情况。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int num1[200] = {0}, num2[200] = {0};
int num3[200] = {0};
char str1[200], str2[200];// 数据输入
cin >> str1 >> str2;
int len1 = strlen(str1);
int len2 = strlen(str2);// 数据存储
for(int i = 0; i<len1; i++)
{
num1[i] = str1[len1-i-1] - '0';
}
for(int i = 0; i < len2; i++)
{
num2[i] = str2[len2-i-1] - '0';
}
if(len1>len2)
{
for(int i=len2;i<=len1-1;i++)
{
num2[i]=0;
}
len2=len1;
}
if(len1<len2)
{
for(int i=len1;i<=len2-1;i++)
{
num1[i]=0;
}
len1=len2;
}
int flag[len1+1]={0};
for(int i=0;i<len1;i++)
{
num3[i]=num1[i]+num2[i]+flag[i];
if(num3[i]/10>0)
{
flag[i+1]=num3[i]/10;
num3[i]=num3[i]%10;
}
}
if(flag[len1]!=0)
{
cout<<flag[len1];
}
for(int i=len1-1;i>=0;i--)
{
cout<<num3[i];
}
return 0;
}