这里直接给出代码,里面有注释。
#include<iostream>
#include<vector>
using namespace std;
//判断A与B的大小
bool cmp(vector<int> &A,vector<int> &B){
if(A.size() != B.size()){
return A.size() > B.size();
}
for(int i = A.size()-1; i>=0; i--){
if(A[i]!=B[i]){
return A[i] > B[i];
}
}
return true;
}
vector<int> reduce(vector<int> &A,vector<int> &B){
vector<int> c;
for(int i = 0,t = 0; i<A.size(); i++){
//经过比较后A的长度比B的长度要长,因此直接用A[i]减去t
t = A[i] - t;
//如果i的值大于等于B的长度则不对B进行操作
if(i< B.size()) t -= B[i];
//经过上述操作后t的值可能为负数,因此需要对t+10之后取个数
c.push_back((t+10)%10);
//如果t小于0的话将t=1,下次循环后t = A[i] - t就相当于借一位。
if(t<0) t = 1;
else t = 0;
}
while(c.size()>1 && c.back() == 0)
c.pop_back();
return c;
}
int main(){
string a,b;
vector<int> A,B;
cin>>a>>b;
for(int i = a.size()-1; i>=0; i--){
A.push_back(a[i]-'0');
}
for(int i = b.size()-1; i>=0; i--){
B.push_back(b[i]-'0');
}
vector<int> c;
//比较A和B的长度大小
if(cmp(A,B)){
c = reduce(A,B);
for(int i = c.size()-1; i>=0; i--)
cout<<c[i];
}
else{
cout<<'-';
for(int i = c.size()-1; i>=0; i--)
cout<<c[i];
}
return 0;
}