Java自定义链表栈实现大数减法借位逻辑错误问题求解
问题根源
你的借位逻辑存在2个核心错误:
- 减法运算方向错误:你当前是无论顺序直接用大值减小值,实际我们要计算的是
被减数位 - 减数位,不能颠倒顺序,这是你得到130而不是70的直接原因 - 借位计算顺序错误:没有优先把上一轮的借位作用到当前被减数上,且借位触发逻辑判断时机错误
修复后的核心逻辑
// --------------------------- 修复后的逻辑 // 先把上一轮的借位加到被减数上(借位为-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的场景:
- current = 2 + 0 = 2 < 5
- sub = 2 + 10 -5 =7,borrow=-1
- 输出结果为
borrow: -1; sub:7.,完全符合预期
120-50场景验证
补零后两个数为120、050,从右到左逐位计算:
- 个位:valueOne=0,valueTwo=0,current=0+0=0 >=0 → sub=0,borrow=0 → 压入0
- 十位:valueOne=2,valueTwo=5,current=2+0=2 <5 → sub=2+10-5=7,borrow=-1 → 压入7
- 百位:valueOne=1,valueTwo=0,current=1 + (-1) =0 >=0 → sub=0,borrow=0 →压入0
最终栈内从顶到底为0、7、0,出栈拼接后去掉前导零得到70,符合预期
内容的提问来源于stack exchange,提问作者spock's-neurons
相关产品推荐
相关产品推荐

