修改 C++ 代码:让其支持输入负数进行高精度减法运算
```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; bool isGreater(const string& a, const string& b) { if (a.length() != b.length()) { return a.length() > b.length(); } return a > b; } string subtract(string a, string b) { bool aNeg = a[0] == '-'; bool bNeg = b[0] == '-'; if (aNeg && bNeg) { a = a.substr(1); b = b.substr(1); swap(a, b); } else if (aNeg) { a = a.substr(1); return "-" + add(a, b); } else if (bNeg) { b = b.substr(1); return add(a, b); } if (a == b) { return "0"; } bool negative = false; if (!isGreater(a, b)) { swap(a, b); negative = true; } string result; int carry = 0; int i = a.length() - 1, j = b.length() - 1; while (i >= 0 || j >= 0) { int x = (i >= 0) ? a[i] - '0' : 0; int y = (j >= 0) ? b[j] - '0' : 0; int diff = x - y - carry; if (diff < 0) { diff += 10; carry = 1; } else { carry = 0; } result.push_back(diff + '0'); i--; j--; } while (result.length() > 1 && result.back() == '0') { result.pop_back(); } if (negative) { result.push_back('-'); } reverse(result.begin(), result.end()); return result; } string add(string a, string b) { string result; int carry = 0; int i = a.length() - 1, j = b.length() - 1; while (i >= 0 || j >= 0 || carry) { int x = (i >= 0) ? a[i] - '0' : 0; int y = (j >= 0) ? b[j] - '0' : 0; int sum = x + y + carry; result.push_back(sum % 10 + '0'); carry = sum / 10; i--; j--; } reverse(result.begin(), result.end()); return result; } int main() { string num1, num2; cin >> num1 >> num2; string result = subtract(num1, num2); cout << result << endl; return 0; } ``` 代码说明: 1. `isGreater` 函数:用于比较两个非负字符串表示的数字大小。 2. `subtract` 函数: - 首先判断两个数的正负情况,根据不同情况转换为合适的计算方式。 - 若两数都为负,交换两数并按正数处理。 - 若 `a` 为负,`b` 为正,计算 `-(|a| + b)`。 - 若 `a` 为正,`b` 为负,计算 `a + |b|`。 - 对于两数都为正的情况,进行正常减法运算。 3. `add` 函数:用于高精度数的加法,在减法处理正负情况时会用到。 4. `main` 函数:读取输入的两个数,调用 `subtract` 函数进行减法运算并输出结果。 ######[AI问答 | 926点数解答 | 2025-09-15 20:31:27]
- 📦 单文件离线保质期管家:Excel逻辑移植+四色预警+跨端响应+本地备份还原(阿里通义 | 2357点数解答 | 2026-04-01 08:04:13)13
- 工程师必看!LoadRunner 性能测试标准流程全揭秘 (百度文心 | 215点数解答 | 2023-11-09 18:25:31)382
- Python 求解序列区间总和:索引转换、边界处理与优化策略(字节豆包 | 320点数解答 | 2025-11-05 19:59:35)88
- C++ 实现序列区间查询:计算以 l 开头子区间总和及注意要点(字节豆包 | 543点数解答 | 2025-11-05 19:59:56)49
- C 语言实现一元稀疏多项式 a=3x^14+2x^8+1 与 b=8x^14–3x^10+10x^6 的表示及基本操作(字节豆包 | 1615点数解答 | 2024-10-18 17:19:15)241
- C 语言:链表实现一元稀疏多项式的建立、销毁、输出及加减运算(字节豆包 | 1939点数解答 | 2024-10-18 17:30:58)229
- C 语言实现:随机式子驱动一元稀疏多项式建立、销毁、运算全解析(字节豆包 | 1842点数解答 | 2024-10-29 08:45:36)178
- C 语言实现一元稀疏多项式:建立、销毁、输出及加减运算全解析(字节豆包 | 1832点数解答 | 2024-10-29 08:49:08)238
- Python实现简单计算器:避开除零、无效操作符及类型错误陷阱(字节豆包 | 329点数解答 | 2025-12-07 09:29:05)69
- Python 实现支持四则运算的最简整数计算器,处理除数为 0 和无效操作符问题(字节豆包 | 164点数解答 | 2025-12-12 19:31:52)65
- C++实现简单整数计算器:支持四则运算,处理除零与无效操作符问题(字节豆包 | 194点数解答 | 2025-12-12 19:35:47)31
- Python实现简单计算器:处理四则运算及异常情况(讯飞星火 | 905点数解答 | 2025-12-17 12:15:53)49