给出2个大整数A,B,计算A+B的结果。
输入
第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)
输出
输出A + B
输入样例
68932147586
468711654886
输出样例
537643802472
#include<bits/stdc++.h>
using namespace std;
struct node{
int d[10010];
int len;
bool f;
node(){memset(d,0,sizeof(d));}
node(char*s)
{
memset(d,0,sizeof(d));
if(s[0]=='-') f=1,s++;
else f=0;
int i=0;
while(s[i]!='\0')
d[i]=s[i]-'0',++i;
len=i;
for(int i=0,j=len-1;i<j;i++,j--)
swap(d[i],d[j]);
}
bool operator<(const node&t)const
{
if(this->len==t.len)
for(int i=t.len-1;i>=0;i--)
if(this->d[i]<t.d[i])
return true;
else if(this->d[i]>t.d[i])
return false;
return this->len<=t.len;
}
node operator+(const node &t)const
{
node ans;
if(t.f==this->f)
{
ans.f=this->f;
int len=max(t.len,this->len);
ans.len=len;
for(int i=0;i<len;i++)
{
ans.d[i]+=this->d[i]+t.d[i];
ans.d[i+1]+=ans.d[i]/10;
ans.d[i]%=10;
}
if(ans.d[len]!=0)
ans.len++;
}
else
{
if(t<(*this))
ans=(*this)-t;
else
ans=t-(*this);
}
return ans;
}
node operator-(const node &t) const
{
node ans;
ans.f=this->f;
int len=this->len;
ans.len=len;
for(int i=0;i<len;i++)
{
ans.d[i]+=this->d[i]-t.d[i];
if(ans.d[i]<0)
ans.d[i]+=10,ans.d[i+1]--;
}
while(ans.len>1&&ans.d[ans.len-1]==0)
ans.len--;
return ans;
}
};
char str[10009];
int main()
{
cin>>str;
node a(str);
cin>>str;
node b(str);
node ans=a+b;
if(ans.f) cout<<'-';
for(int i=ans.len-1;i>=0;i--)
cout<<ans.d[i];
return 0;
}