AcWing 792. 高精度减法
原题链接
简单
作者:
along1083
,
2025-01-14 17:09:38
,
所有人可见
,
阅读 3
高精度减法
#include<bits/stdc++.h>
using namespace std;
bool cmp(string a, string b) {
// a > b 返回 true
// a < b 返回false
if (a.size() == b.size()) return a > b;
return a.size() > b.size();
}
vector<int> sub(vector<int>A, vector<int> B) {
// 保证A>B
vector<int>C(A.size(), 0);
for (int i = 0; i < A.size(); i++) C[i] += A[i];
for (int i = 0; i < B.size(); i ++) C[i] -= B[i];
// 处理借位
for(int i = 0; i < C.size() - 1; i ++) {
if (C[i] < 0) {
C[i] += 10;
C[i + 1] -= 1;
}
}
// 处理前导0
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main(){
string a, b;
cin >> a >> b;
if (a == b) {
printf("0");
return 0;
}
if (!cmp(a,b)) {
swap(a, b);
printf("-");
}
vector<int>A, B;
for(int i = a.size() - 1; i >= 0; i --)
A.push_back(a[i] - '0');
for (int j = b.size() - 1; j >= 0; j --)
B.push_back(b[j] - '0');
auto C = sub(A, B);
for (int i = C.size() - 1; i >= 0; i --) {
printf("%d",C[i]);
}
return 0;
}