待修正的高精度减法代码
作者:
Soel
,
2022-11-19 20:42:00
,
所有人可见
,
阅读 169
#include<iostream>
#include<vector>
using namespace std;
int com(vector<int>& A, vector<int>& B) { //比较函数
for (int i = 0; i < A.size(); i++) {
if (A[i] - B[i] < 0) return true;
}
return false;
}
vector<int> sub(vector<int>& A, vector<int>& B) {
if ((A.size() < B.size()) || com(A, B)) {//如果A的长度小于B,或者A小于B则加一个-符号反过来B-A;
cout << "-";
vector<int> swap;
swap = A;
A = B;
B = swap;
}
vector<int> c; //定义容器c
int t = 0; //默认定义不需要减进位
for (int i = 0; i < A.size(); i++) { //循环遍历A的长度,此时A的长度是最长的;
if (i < B.size()) {
A[i] -= t; //每次遍历让A减去进位
if (A[i] - B[i] >= 0) { //当A的位置上的数减去B位置上的数大于等于0的时候
c.push_back(A[i] - B[i]); //直接插入容器c中
t = 0; //倘若可以,则让进位恢复原来的0状态,不影响下一次减少
}
else {
c.push_back(A[i] + 10 - B[i]); //否则的话,则需要向下一位数借一位
t = 1; //使进位借1
}
}
else {
if (t) { //如果t还存在的话
A[i] -= t; //则让A的下一位减掉进位
c.push_back(A[i]);
t = 0; //恢复进位
}
else {
c.push_back(A[i]); //将剩余的A补上去
}
}
}
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 = sub(A, B);
for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);
return 0;
}