输入两个大整数a, b(0 ≤ a, b ≤ 101000);
输入只有一行,包含两个大整数a,b
输出只有一行,包含一个大整数为a+b的和
#include<iostream>
//#include<cstdio>//gets()
#include<string.h>//strlen()
using namespace std;
const int N = 1001;
int main()
{
char a[N],b[N];
int f[N]={0},i = 0,j = 0;
cin>>a>>b;
// gets(a);
//gets(b);
//puts(a);
//puts(b);
//cout<<strlen(a)<<" "<<strlen(b);
int sizea = strlen(a);
int sizeb = strlen(b);
for(i=0;i<sizea/2;i++)//逆序
{
a[i] = a[i] ^ a[sizea-1-i];
a[sizea-1-i] = a[i] ^ a[sizea-1-i];
a[i] = a[i] ^ a[sizea-1-i];
}
for(i=0;i<sizeb/2;i++)
{
b[i] = b[i] ^ b[sizeb-1-i];
b[sizeb-1-i] = b[i] ^ b[sizeb-1-i];
b[i] = b[i] ^ b[sizeb-1-i];
}
// 判断输入全是0的情况,这种情况下,应该只输出一个0,如果省略这里的代码,下面的求和部分不能正常打印0
i = sizea - 1;
while('0' == a[i])
{
i--;
}
if(-1 == i)//自减后为-1
{
j = sizeb - 1;
while('0' == b[j])
{
j--;
}
if(-1 == j)
{
cout<<0;
}
}
//求和
if(sizea>=sizeb)// 第一次输入的数比较长
{
for(i=0;i<sizeb;i++)
{
a[i] = a[i] + b[i] -'0';
if(a[i]>'9')
{
a[i] -= 10;
a[i+1]++;
}
}
i = sizea-1;
while('0'== a[i])//过滤前面多余的0(因为用的是字符类型的数据,所以如果以00001 00002这种形式输入,会打印出多余的0)
{
i--;
}
for(j=i;j>=0;j--)
{
cout<<a[j];
}
}
else//第二次输入的数比较长
{
for(i=0;i<sizea;i++)
{
b[i] = a[i] + b[i] -'0';
if(b[i]>'9')
{
b[i] -= 10;
b[i+1]++;
}
}
i = sizeb -1;
while('0' == b[i])
{
i--;
}
for(j=i;j>=0;j--)
{
cout<<b[j];
}
}
return 0;
}