题目链接 AcWing 792. 高精度减法
题目
思路: Step1、数据存储 [从个位开始存储]
Step2、人工模拟减法
#include <iostream>
#include <vector>
using namespace std;
//判断A是否大于等于B
bool cmp(vector<int> &A,vector<int> &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;//相等
}
//C = 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 = A[i] - t;
if (i<B.size()) t -= B[i];
C.push_back((t + 10) % 10); //如果t>0 加10不变 如果t<10 则c[i] 为补位
if (t<0) t = 1; //借位
else t = 0;
}
//长度大于一 且为0的数组删去 模拟输出
while (C.size() > 1 && C.back() == 0) C.pop_back(); // C.back() 返回第0位元素 pop_back() 从0位元素开始删除
return C;
}
int main() {
string a,b;
vector<int>A,B;
cin>>a>>b;
for(int i=a.size()-1;i>=0;--i)A.push_back(a[i]-'0'); //存储数字 =字符位 -'0'
for(int i=b.size()-1;i>=0;--i)B.push_back(b[i]-'0');
if(cmp(A,B)) {
auto C = sub(A,B);
for(int i=C.size()-1;i>=0;--i)printf("%d",C[i]); //高位先输出
}
else {
auto C = sub(B,A);
printf("-");
for(int i=C.size()-1;i>=0;--i)printf("%d",C[i]); //高位先输出
}
return 0;
}