#8. 高精度减法
高精度减法
给定两个正整数(不含前导 ),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
输入样例:
32
11
输出样例:
21
已按 OJ 可直接使用的 1.in/1.out ... 25.in/25.out 生成 25 组“超大整数减法(结果可为负、无前导 0)”测试数据,包含多组 10^5 位压力、长借位链、相等为 0、正负结果、以及去前导 0 等关键坑点。
下面按 1..25 逐组说明每组主要在卡哪些常见错误做法(正确:先比较大小决定符号;做绝对值减法时逐位借位;结果要去掉前导 0,若为 0 输出单个 0):
- 样例 32-11:基础正确性(正结果)。
- 相等(结果 0):卡相等时输出
0(别输出空串/别输出很多 0)。 - 小负数(11-32):卡符号处理(必须输出负号)。
- 简单借位(1000-1):卡借位逻辑与尾部 0 处理。
- 超长连续借位链(1 后面很多 0 减 1):卡借位一路传递到最高位(常见 bug:只借一次/中途断)。
- 大数无大量借位(9876… - 1234…):卡一般性正确性与长数字运算。
- 长度不同且结果为负(999… - 1000…):卡比较大小(按长度/字典序),以及负号。
- 明显长度不同负结果(12345-123456):卡长度比较与符号。
- 明显长度不同正结果(123456-12345):卡对齐补 0 与借位。
- 结果需要去前导 0(1000-999=1):卡输出去前导 0(别输出 0001)。
- 交替数字,借位散布:卡“借位在多处出现”时的实现(别把借位清零/传播错)。
- #11 反向(负结果):卡符号 + 借位混合。
- 1000 位随机 a-b(可能正可能负):综合正确性(常暴露数组越界/borrow 处理)。
- 1000 位随机且强制 a<b(负结果):专卡“比较后交换并加负号”的逻辑。
- 10000 位:10^9999 - 1:长借位链 + 结果长度不变但前面会变成 999…;卡借位与去前导 0。
- 10000 位负结果:1 - 10^9999:卡超大负数输出(
-+ 大数),以及不要溢出。 - 100000 位全 9 - 1:只在末位借位(其实不需要长链),卡末位处理与性能。
- 100000 位:10^99999 - 1(最大借位链):强卡极限借位链与性能。
- 100000 位随机 - 随机:强卡性能与正确性(不能用内置整型)。
- 100000 位随机且强制负结果:强卡符号 + 大规模借位。
- 差值为 1(但内部 0 很多):卡只改末位时不要把中间位搞错。
- 结果为 1 的经典(100000-99999):卡连续借位与去前导 0。
- 10^5 位模式串相减(两个大串重复):卡大规模逐位减法正确性(容易在循环索引上出错)。
- 接近数相减,借位交错很复杂:
1000...001 - 999...999,卡多位连续借位与最高位处理。 - 长度 50000:a=1后面全0,b=a-1(全9):结果应为 1;卡比较大小(a>b)、去前导 0、以及大长度下的效率。
你继续下一题的话,我也会同样:给 zip + 每组卡点逐条说明。