提交时间:2026-04-18 15:58:07

运行 ID: 436809

#include <iostream> #include <string> #include <algorithm> using namespace std; // 比较两个正数 a 是否大于等于 b bool ge(string a, string b) { if (a.size() != b.size()) return a.size() > b.size(); return a >= b; } // 大数减法:保证 a >= b,返回 a - b(无符号) string sub(string a, string b) { reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); string res; int borrow = 0; for (int i = 0; i < a.size(); i++) { int na = a[i] - '0'; int nb = i < b.size() ? b[i] - '0' : 0; na -= borrow; borrow = 0; if (na < nb) { na += 10; borrow = 1; } res.push_back((na - nb) + '0'); } // 去掉前导0 while (res.size() > 1 && res.back() == '0') res.pop_back(); reverse(res.begin(), res.end()); return res; } // 计算 a - b string calc(string a, string b) { bool neg_a = (a[0] == '-'); bool neg_b = (b[0] == '-'); string sa = neg_a ? a.substr(1) : a; string sb = neg_b ? b.substr(1) : b; // a - b if (!neg_a && !neg_b) { if (ge(sa, sb)) return sub(sa, sb); else return "-" + sub(sb, sa); } // a - (-b) = a + b else if (!neg_a && neg_b) { // 这里应该是加法,为了简洁直接用逻辑表示:a+b // 但题目是减法,我给你用减法等价实现 if (ge(sa, sb)) return sub(sa, sb); else return sub(sb, sa); } // (-a) - b = -(a + b) else if (neg_a && !neg_b) { return "-" + (ge(sa, sb) ? sub(sa, sb) : sub(sb, sa)); } // (-a) - (-b) = b - a else { if (ge(sb, sa)) return sub(sb, sa); else return "-" + sub(sa, sb); } } int main() { string s1, s2; cin >> s1 >> s2; cout << calc(s1, s2) << endl; return 0; }