给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586 468711654886
Output示例
537643802472
#include<bits/stdc++.h>
using namespace std;
string add(string a,string b)
{
string c;
int len1=a.length();
int len2=b.length();
int len=max(len1,len2);
for(int i=len1;i<len;i++)
a="0"+a;
for(int i=len2;i<len;i++)
b="0"+b;
int ok=0;
for(int i=len-1;i>=0;i--)
{
char temp=a[i]+b[i]-'0'+ok;
if(temp>'9')
{
ok=1;
temp-=10;
}
else ok=0;
c=temp+c;
}
if(ok) c="1"+c;
int pos=-1;
for(int i=0;i<c.length();i++){
if(c[i]=='0')pos=i;
else
break;
}
// cout<<pos<<endl;
if(pos==c.length()-1)return "0";
return c.substr(pos+1);
}
string sub(string a,string b)
{
string c;
bool ok=0;
int len1=a.length();
int len2=b.length();
int len=max(len1,len2);
for(int i=len1;i<len;i++)
a="0"+a;
for(int i=len2;i<len;i++)
b="0"+b;
if(a<b)
{
string temp=a;
a=b;
b=temp;
ok=1;
}
for(int i=len-1;i>=0;i--)
{
if(a[i]<b[i])
{
a[i-1]-=1;
a[i]+=10;
}
char temp=a[i]-b[i]+'0';
c=temp+c;
}
int pos=0;
while(c[pos]=='0' && pos<len) pos++;
if(pos==len) return "0";
if(ok) return "-"+c.substr(pos);
return c.substr(pos);
}
int main()
{
string s1,s2;
while(cin>>s1>>s2){
bool flag1=false,flag2=false;
if(s1[0]=='-')flag1=true;
if(s2[0]=='-')flag2=true;
if(flag1==false&&flag2==false)cout<<add(s1,s2)<<endl;
if(flag1==false&&flag2==true)cout<<sub(s1,s2.substr(1))<<endl;
if(flag1==true&&flag2==false)cout<<sub(s2,s1.substr(1))<<endl;
if(flag1==true&&flag2==true)cout<<"-"+add(s1.substr(1),s2.substr(1))<<endl;
}
return 0;
}
以后要用java写这类题了,c++写醉了