题目描述
计算整数a+b的值,( -10^100 <= a, b <= 10^100);
输入格式
一行:两个用空格分割的整数a和b.
输出格式
一行:a+b的值
输入输出样例
输入样例1:
1 1
输出样例1:
2
输入样例2:
1 -2
输出样例2:
-1
【耗时限制】1000ms 【内存限制】128MB
//
//Created by Carlgood.
//
//Note:This program is written in version DEV-C++ 5.11.
//Subject source:"hppt://oj.codingle.cn"
# include <iostream>
# include<cmath>
# include<string>
# include<cstring>
# include<cstdio>
# include<algorithm>
# include<sstream>
# define This_program_is_written_by_Carlgood_Programming_Studio 9876543210
using namespace std;
int a[210],b[210],c[210];
string jian(string x,string y)
{
string s3;
if(x.size()<y.size()||(x.size()==y.size()&&x<y))
{
x.swap(y);
}
int as=x.size();
int bs=y.size();
int cs=as;
for(int i=1;i<=as;i++)
{
a[i]=x[as-i]-'0';
}
for(int i=1;i<=bs;i++)
{
b[i]=y[bs-i]-'0';
}
for(int i=1;i<=cs;i++)
{
if(a[i]<b[i])
{
a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
while(c[cs]==0&&cs>1) cs--;
for(int i=cs;i>=1;i--)
{
s3+=c[i]+'0';
}
return s3;
}
string add(string x,string y)
{
int as=x.size();
int bs=y.size();
int cs=max(as,bs)+1;
for(int i=1;i<=as;i++)
{
a[i]=x[as-i]-'0';
}
for(int i=1;i<=bs;i++)
{
b[i]=y[bs-i]-'0';
}
for(int i=1;i<=cs;i++)
{
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
while(c[cs]==0&&cs>1) cs--;
string m;
for(int i=cs;i>=1;i--)
{
m+=c[i]+'0';
}
return m;
}
int main()
{
string a,b,m;
cin>>a>>b;
if(a[0]=='-'&&b[0]=='-')
{
a.erase(0,1);
b.erase(0,1);
m+='-';
m+=add(a,b);
}
else if(a[0]=='-'&&b[0]!='-')
{
a.erase(0,1);
if(a>b) m+='-';
m+=jian(a,b);
}
else if(a[0]!='-'&&b[0]=='-')
{
b.erase(0,1);
if(a<b) m+='-';
m=jian(a,b);
}
else
{
m=add(a,b);
}
cout<<m;
return 0;
}