如图所示

解释
6-9-tt初始值为0,因为从低位往高位进行减法运算故第一位不可能出现前面有借位情况(t+10)%10这个结果存进容器,如果两数相减结果小于0,通过+10也能模拟进位的情况,如果≥0存进的也会是该数本身,非常的巧妙A≥B故A必定每次都要去减借位,但B不一定,防止越界所以对长度进行判断后再进行减法运算t值来判断,因为进行借位的操作是在步骤4进行的,那个地方巧妙的进行了借位,我们在这儿就需要判断它是否小于0来判断#include
#include
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(); i >= 0; --i) {
if (A[i] != B[i]) {
return A[i] >= B[i];
}
}
return true;
}
vector<int> sub(vector<int> &A, vector<int> &B) {
vector<int> C;
int t = 0;
for (int i = 0; i < A.size(); ++i) {
t = A[i] - t;
if (i < B.size()) {
t -= B[i];
}
C.push_back((t + 10) % 10);
if (t < 0) {
t = 1;
} else {
t = 0;
}
}
while (C.size() > 1 && C.back() == 0) {
C.pop_back();
}
return C;
}
int main() {
string a, b;
cin >> a >> b;
vector<int> A;
// 将A字符串逆序读入容器
for (int i = a.size() - 1; i >= 0; --i) {
A.push_back(a[i] - '0');
}
vector<int> B;
// 将B字符串逆序读入容器
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);
// 逆序输出正数结果
for (int i = C.size() - 1; i >= 0; --i) {
cout << C[i];
}
} else {
C = sub(B, A);
cout << "-";
// 逆序输出负数结果
for (int i = C.size() - 1; i >= 0; --i) {
cout << C[i];
}
}
return 0;
}