AcWing 792. 高精度减法
原题链接
简单
作者:
minux
,
2020-04-19 22:51:32
,
所有人可见
,
阅读 483
#include <bits/stdc++.h>
using namespace std;
// 判断A>=B是否成立
bool cmp(vector<int>&A, vector<int>&B){
if(A.size()==B.size()){
for(int i=0; i<A.size(); ++i)
if(A[i]>B[i]) return true;
else if(A[i]<B[i]) return false;
else continue;
}
return A.size()>=B.size();
}
// 计算A-B, 当A>=B
vector<int> sub(vector<int>& A, vector<int>& B){
int i=A.size()-1;
int j=B.size()-1;
int c=0;
vector<int> C;
while(i>=0 || c){
int va=A[i]+c;
int vb=j>=0?B[j]:0;
int v;
if(va<vb){
v=va+10-vb;
c=-1;
}
else{
v=va-vb;
c=0;
}
C.push_back(v);
--i;
--j;
}
// 检查前导0
while(C.size()>1 && !C.back()) C.pop_back();
if(C.size()>1)
reverse(C.begin(), C.end());
return C;
}
int main(){
string a, b;
cin>>a>>b;
vector<int> A, B;
for(int i=0; i<a.size(); ++i) A.push_back(a[i]-'0');
for(int i=0; i<b.size(); ++i) B.push_back(b[i]-'0');
vector<int> C;
if(cmp(A, B)){
C=sub(A, B);
}
else{
C=sub(B, A);
cout<<"-";
}
for(auto &c: C) cout<<c;
return 0;
}