AcWing 792. 高精度减法 不比较大小的做法
原题链接
简单
作者:
Kita3
,
2025-04-16 22:01:38
· 福建
,
所有人可见
,
阅读 3
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
string buff = "";
string a, b;
cin >> a >> b;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int l1 = a.size(), l2 = b.size();
int n = max(l1, l2);
vector<int> ans(n);
for(int i = 0; i < n; i++){
ans[i] += (i < l1 ? a[i] - '0' : 0) - (i < l2 ? b[i] - '0' : 0);
}
for(int i = 0; i < n - 1; i++){
if(ans[i] < 0){
int temp = (-ans[i] - 1) / 10 + 1;
ans[i] += temp * 10;
ans[i + 1] -= temp;
}
}
for(int i = n - 1; i >= 0; i--){
if(ans[i] == 0){
continue;
}
if(ans[i] > 0){
break;
}
if(ans[i] < 0){
ans[i] += 1;
buff += '-';
ans[i] = abs(ans[i]);
while(i){
i--;
ans[i] = 9 - ans[i];
}
ans[i] += 1;
while(ans[i] > 9){
ans[i + 1] += 1;
ans[i] %= 10;
i++;
}
break;
}
}
cout << buff;
for(int i = n - 1; i >= 0; i--){
if(ans[i] == 0 && i > 0){
continue;
}
cout << ans[i];
while(i){
i--;
cout << ans[i];
}
return 0;
}
}