我们将高精度减法写成了一个子函数,方便在做题的时候调用。
代码:
#include<bits/stdc++.h>
#include<math.h>
#include<iostream>
using namespace std;
const int N = 11000;
string a , b;
string _add(string a , string b)
{
string sum;
int na[N] = {0};
int nb[N] = {0};
int ans[N+1] = {0};
for(int i = a.size() ; i > 0 ; i--)
{
na[i] = a[a.size()-i] - '0';
}
for(int i = b.size() ; i > 0 ; i--)
{
nb[i] = b[b.size()-i] - '0';
}
int max1 = max(a.size() , b.size());
for(int i = 1 ; i <= max1 ; i++)
{
ans[i+1] = (ans[i]+na[i]+nb[i])/10;
ans[i] = (ans[i]+na[i]+nb[i])%10;
}
if(ans[max1+1]!=0)
sum+="1";
for(int i = max1 ; i > 0 ; i--)
{
sum+=ans[i]+'0';
}
return sum;
}
string _minus(string a , string b)
{
int na[N] = {0};
int nb[N] = {0};
int ans[N] = {0};
string diff;
if((a < b&&a.size()<=b.size())||b.size()>a.size())
return "-"+_minus(b,a);
for(int i = a.size();i>0;i--)
na[i] = a[a.size()-i]-'0';
for(int i = b.size();i>0;i--)
nb[i] = b[b.size()-i]-'0';
int max1 = max(a.size(),b.size());
for(int i = 1 ; i <= max1 ; i++)
{
if(na[i] < nb[i])
{
na[i+1]--;
na[i]+=10;
}
ans[i] = na[i]-nb[i];
}
while(ans[max1] == 0)
max1--;
if(max1 < 1)
return "0";
for(int i = max1 ; i > 0 ; i--)
{
diff+=ans[i]+'0';
}
return diff;
}
int main()
{
string a , b;
cin >> a >> b;
if(a[0]=='-'&&b[0]=='-')
{
a.erase(0,1);
b.erase(0,1);//将a,b打头的负号弄掉再进行运算
cout << _minus(b,a);
return 0;
}
else if(a[0]=='-')
{
a.erase(0,1);
cout << '-' << _add(a,b);
return 0;
}
else if(b[0]=='-')
{
b.erase(0,1);
cout << _add(a,b);
return 0;
}
else
cout << _minus(a,b)<< endl;
return 0;
}