版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/83211230
给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586 468711654886
Output示例
537643802472
简单的模拟题,加法减法,分类有点麻烦,内含去0的小技巧。
#include<iostream>
#include<string>
using namespace std;
void sum(string a,string b,int temp)
{
if(a.length()==b.length())
{
if(a.compare(b)==-1)
{
string t;
t=a;
a=b;
b=t;
}
}else if(a.length()<b.length())
{
string t;
t=a;
a=b;
b=t;
}
string t="0";
t+=a;
a=t;
int i,j;
for(i=a.length()-1,j=b.length()-1;j>=0;j--,i--)
{
// cout<<a[i]<<" "<<b[j]<<endl;
if((a[i]+b[j]-'0')>'9')
{
a[i-1]++;
a[i]=a[i]+b[j]-'9'-1;
}
else
a[i]+=b[j]-'0';
}
for(i=a.length()-1;i>=0;i--)
{
if(a[i]>'9')
{
a[i-1]++;
a[i]=a[i]-10;
}
}
while(a[0]=='0')
if(a.length()!=1)
a.erase(0,1);
else
break;
if(temp==1)
cout<<a<<endl;
else
cout<<"-"<<a<<endl;
}
void sub(string a,string b,int temp)
{
if(a.length()==b.length())
{
if(a.compare(b)==-1)
{
string t;
t=a;
a=b;
b=t;
}
}else if(a.length()<b.length())
{
string t;
t=a;
a=b;
b=t;
}
int i,j;
for(i=a.length()-1,j=b.length()-1;j>=0;j--,i--)
{
// cout<<a[i]<<" "<<b[j]<<endl;
if((a[i]-b[j]+'0')<'0')
{
a[i-1]--;
a[i]=a[i]-b[j]+'9'+1;
}
else
a[i]-=b[j]-'0';
}
for(i=a.length()-1;i>=0;i--)
{
if(a[i]<'0')
{
a[i-1]--;
a[i]=a[i]+10;
}
}
while(a[0]=='0')
if(a.length()!=1)
a.erase(0,1);
else
break;
if(a=="0")
cout<<a<<endl;
else
{
if(temp==1)
cout<<a<<endl;
else
cout<<"-"<<a<<endl;
}
}
int main()
{
string a,b;
cin>>a>>b;
if(a[0]!='-'&&b[0]!='-')
sum(a,b,1);
else if(a[0]=='-'&&b[0]=='-')
{
a.erase(0,1);
b.erase(0,1);
sum(a,b,2);
}
else if(a[0]=='-')
{
a.erase(0,1);
if(a.length()==b.length())
{
if(a.compare(b)==1)
sub(a,b,2);
else
sub(a,b,1);
}
else if(a.length()<b.length())
sub(a,b,1);
else
sub(a,b,2);
}
else
{
b.erase(0,1);
if(a.length()==b.length())
{
if(a.compare(b)==1)
sub(a,b,1);
else
sub(a,b,2);
}
else if(a.length()>b.length())
sub(a,b,1);
else
sub(a,b,2);
}
return 0;
}