const int DEMICAL = 10;
// a >= b
vector<int> minusAB(vector<int>& a, vector<int>& b)
{
vector<int> c;
unsigned i = 0;
int t = 0;
while (i < a.size()) {
t += a[i];
if (i < b.size()) {
t -= b[i];
}
c.push_back((t + DEMICAL) % DEMICAL);
if (t < 0) {
t = -1;
} else {
t = 0;
}
i++;
}
while (c.size() > 1 && c.back() == 0) {
c.pop_back();
}
return c;
}
bool vectorLt(vector<int>& a, vector<int>& b)
{
if (a.size() < b.size()) { return false; }
if (a.size() > b.size()) { return true; }
for (int i = a.size() - 1; i >=0 ; --i) {
if (a[i] < b[i]) {
return false;
} else if (a[i] > b[i]){
return true;
}
}
return true;
}
string bigNumberMinus(vector<int>& a, vector<int>& b)
{
bool flag = false;
vector<int> c;
if (vectorLt(a, b)) {
c = minusAB(a, b);
} else {
flag = true;
c = minusAB(b, a);
}
string s = flag ? "-" : "";
for_each(c.rbegin(), c.rend(), [&s](int a) { s += to_string(a); });
return s;
}
高精度减法
最新推荐文章于 2022-01-29 23:25:48 发布