题目大意
输入a,b,输出
a
+
b
a+b
a+b
解题思路
这一题,数据范围很小,可以使用c++内置的加法,但也可以使用高精度算法。
代码实现
内置方法
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b;
cin>>a>>b;
cout<<a+b;
}
高精度
#include<bits/stdc++.h>
using namespace std;
string a,b;
string jia(string jia1,string jia2)
{
string a[3],ans="";
bool flag=false;
int d=0,l=0,jsa=0,jsb=0,t=0,c=0;
a[1]=jia1;
a[2]=jia2;
if(a[1].size()>a[2].size())
d=2;
else
d=1;
l=max(a[1].size(),a[2].size())-min(a[1].size(),a[2].size());
for(int i=1;i<=l;i++)
a[d]="0"+a[d];
a[1]='0'+a[1];
a[2]='0'+a[2];
for(int i=a[1].size()-1;i>=0;i--)
{
jsa=a[1][i]-'0';
jsb=a[2][i]-'0';
t=jsa+jsb+c;
c=t/10;
a[0]=a[0]+char(t%10+48);
}
int j=a[0].size()-1;
if(a[0][a[0].size()-1]=='0')
j--;
for(int i=j;i>=0;i--)
ans+=a[0][i];
return ans;
}
string jian(string jian1,string jian2)
{
int d=0,l=0,jw=0,t=0;
string a[3],ans="";
bool flag=false;
a[1]=jian1;
a[2]=jian2;
if(a[2][0]=='-')
if(a[1][0]=='-')
ans+="-",a[1]=a[1].substr(1,a[1].size()-1),a[2]=a[2].substr(1,a[2].size());
else
return jia(a[1],a[2].substr(1,a[2].size()-1));
else if(a[1][0]=='-')
return "-"+jia(a[1].substr(1,a[1].size()-1),a[2]);
if(a[1].size()==a[2].size()&&a[1]<a[2]||a[1].size()<a[2].size())
{
ans+="-";
swap(a[1],a[2]);
}
if(a[1].size()>a[2].size())
d=2;
else
d=1;
l=max(a[1].size(),a[2].size())-min(a[1].size(),a[2].size());
for(int i=1;i<=l;i++)
a[d]="0"+a[d];
for(int i=a[1].size()-1;i>=0;i--)
{
if((a[1][i]-'0')<(a[2][i]-'0')+jw)
{
t=(a[1][i]-'0')+10-jw-(a[2][i]-'0');
jw=1;
}
else
{
t=(a[1][i]-'0')-jw-(a[2][i]-'0');
jw=0;
}
a[1][i]=char(t+'0');
}
int j=0;
while(a[1][j]=='0'&&j<a[1].size()-1) j++;
for(int i=j;i<a[1].size();i++)
ans+=a[1][i];
if(ans[1]=='-')
ans=ans.substr(2,ans.size()-2);
if(ans.substr(0,2)=="-0")
ans=ans.substr(1,ans.size()-1);
return ans;
}
int main()
{
cin>>a>>b;
if(b[0]=='-')
{
cout<<jian(a,b.substr(1,b.size()));
}
else
{
cout<<jian(a,"-"+b);
}
}
样例1
输入
10 21
输出
31
样例2
输入
10 -21
输出
-11
样例3
输入
30 -21
输出
9
|