那就是——如果是小-大实现不了负数!
就会出现这样的滑稽场面:
为了解决这个问题,有重新完善了一下这个程序:
话不多说,直接上代码!
#include <iostream>
#include <string>
#include <vector>
using namespace std;
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;
int len_a = a.length(), len_b = b.length();
vector<int> A(len_a), B(len_b);
for (int i = 0; i < len_a; i++) A[i] = a[len_a - i - 1] - '0';
for (int i = 0; i < len_b; i++) B[i] = b[len_b - i - 1] - '0';
vector<int> ans;
if (A.size() < B.size()) {
ans = Sub(B, A);
cout << "-";
} else ans = Sub(A, B);
for (int i = ans.size() - 1; i >= 0; i--)
cout << ans[i];
cout << endl;
return 0;
}
这个程序还优化了一下,确实还挺好用!
原来的数据再次测试,就成功了!