高精度减法模板https://www.acwing.com/problem/content/794/
减法注意要点:
- 对于
t = A[i] - B[i] - t
; 可以拆为t = A[i] - t
如果B[i]
合法,再t -= B[i]
这么两步来做 - 相减后
t
的处理 ,把t >= 0
和t < 0
用一个式子来表示t = (t + 10) % 10
这个木有想到 - A B大小判断,自己写的太冗余,
不如单独拎出来
#include <bits/stdc++.h>
using namespace std;
//判断是否A >= B
bool cmp(vector<int> &A, vector<int> &B){
if(A.size() != B.size()) return A.size() > B.size(); //如果A,B不等,A大返回true,B大返回false
for(int i = A.size() - 1; i >= 0; i--){ //如果A,B数位相等,按人类习惯就从高位开始比较
if(A[i] != B[i]) return A[i] > B[i]; //同上
}
return true; //都一样就返回true,因为判断是A >= B;
}
vector<int> sub(vector<int> &A, vector<int> &B){
vector<int> C;
for(int i = 0, t = 0; i < A.size(); i++){ //t表示借位
t = A[i] - t;
if(i < B.size()) t -= B[i]; //判断B是否还有位数
C.push_back((t + 10) % 10); //合二为一 (1)t >= 0,输出t. (2)t < 0, 输出t + 10
if(t < 0) t = 1; //进位
else t = 0;
}
while(C.size() > 1 && C.back() == 0) C.pop_back(); //去除前导0
return C;
}
int main(){
string a, b;
cin >> a >> b;
vector<int> 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;
if(cmp(A, B)) C = sub(A, B); //如果A >= B,直接减
else C = sub(B, A), cout << "-"; //A < B,先输出'-',再算 -(A - B)
for(int i = C.size() - 1; i >= 0; i--) cout << C[i];
cout << endl;
return 0;
}
标签:10,return,高精度,int,back,vector,减法,size
From: https://www.cnblogs.com/csai-H/p/16935120.html