高精度减法其实跟加法差不多,首先就是需要逆序存入整数数组,其次就是做运算,最后就是删除前导0逆序输出。
不过在做高精度减法需要考虑一下两个数的关系是有三种的,a>b,a<b a==b;思考全面咱们的程序才能拿满分。
以下是完整程序:
#include<bits/stdc++.h>
using namespace std;
const int maxn=10010;
int a[maxn],b[maxn];
bool compare(string a,string b){
if(a.size()<b.size()){
return true;
}
if(a.size()>b.size()){
return false;
}
for(int i=0;i<a.size();i++){
if(a[i]>b[i]){
return false;
}
if(a[i]<b[i]){
return true;
}
}
return false;
}
int main() {
string s1,s2;
cin>>s1>>s2;
//比较 默认s1>s2
if(compare(s1,s2)){
swap(s1,s2);
printf("-");
}
int len1=s1.size();
int len2=s2.size();
for(int i=0;i<len1;i++){
a[len1-i]=s1[i]-'0';
}
for(int i=0;i<len2;i++){
b[len2-i]=s2[i]-'0';
}
for(int i=1;i<=len1;i++){
a[i]-=b[i];
if(a[i]<0){
a[i+1]--;
a[i]+=10;
}
}
while(a[len1]==0&&len1>1){
len1--;
}
for(int i=len1;i>=1;i--){
cout<<a[i];
}
return 0;
}