AcWing 792. 高精度减法
原题链接
简单
作者:
Coinisi.
,
2022-05-14 17:29:40
,
所有人可见
,
阅读 171
#include <vector>
#include <cstring>
#include <iostream>
#define VI vector<int>
using namespace std;
bool cmp(VI &A, VI &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;
}
VI sub(VI &A, VI &B)
{
VI C;
for(int i = 0, t = 0; i < A.size(); i ++)
{
t = A[i] - t;
if(i < B.size()) t = t - B[i];
C.push_back((t + 10) % 10);
if(t < 0) t = 1;
else t = 0;
}
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
signed main()
{
string a, b; VI A, B;
ios::sync_with_stdio(false);
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');
VI C;
if(cmp(A, B)) C = sub(A, B);
else C = sub(B, A), cout << '-';
for(int i = C.size() - 1; i >= 0; i --) cout << C[i];
cout << endl;
return 0;
}