You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义链表栈实现大数减法借位逻辑错误问题求解

问题根源

你的借位逻辑存在2个核心错误:

  1. 减法运算方向错误:你当前是无论顺序直接用大值减小值,实际我们要计算的是 被减数位 - 减数位,不能颠倒顺序,这是你得到130而不是70的直接原因
  2. 借位计算顺序错误:没有优先把上一轮的借位作用到当前被减数上,且借位触发逻辑判断时机错误

修复后的核心逻辑

// --------------------------- 修复后的逻辑
// 先把上一轮的借位加到被减数上(借位为-1,等价于被减数减1)
int current = valueOne + borrow;
if (current < valueTwo) {
    // 不够减,需要借位
    sub = current + 10 - valueTwo;
    borrow = -1;
} else {
    // 够减,无需借位
    sub = current - valueTwo;
    borrow = 0;
}
// --------------------------- 逻辑结束
result.push(sub);

验证效果

最小复现代码验证

代入valueOne=2、valueTwo=5、borrow初始值0的场景:

  1. current = 2 + 0 = 2 < 5
  2. sub = 2 + 10 -5 =7,borrow=-1
  3. 输出结果为borrow: -1; sub:7.,完全符合预期

120-50场景验证

补零后两个数为120、050,从右到左逐位计算:

  1. 个位:valueOne=0,valueTwo=0,current=0+0=0 >=0 → sub=0,borrow=0 → 压入0
  2. 十位:valueOne=2,valueTwo=5,current=2+0=2 <5 → sub=2+10-5=7,borrow=-1 → 压入7
  3. 百位:valueOne=1,valueTwo=0,current=1 + (-1) =0 >=0 → sub=0,borrow=0 →压入0
    最终栈内从顶到底为0、7、0,出栈拼接后去掉前导零得到70,符合预期

内容的提问来源于stack exchange,提问作者spock's-neurons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:54:04