Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
436804 顾鑫辰 【C6-4】高精度减法2 C++ 解答错误 0 2 MS 260 KB 1910 2026-04-18 15:48:57

Tests(0/4):


#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; }


测评信息: