基于最低位优先数字列表的无限精度iadd加法函数实现思路求教
无限精度加法函数iadd实现思路
核心逻辑完全模拟人工竖式加法的计算规则,刚好你的存储格式是最低位在前,不需要额外反转列表就能直接从左到右按位计算:
- 初始化三个变量:
- 进位
carry,初始值为0 - 结果列表
res,初始为空 - 遍历下标
i,初始值为0
- 进位
- 循环执行直到同时满足三个条件:
i >= len(I)、i >= len(J)、carry == 0
每轮循环执行以下操作:- 取I的当前位数字:如果
i < len(I)则取I[i],否则取0 - 取J的当前位数字:如果
i < len(J)则取J[i],否则取0 - 计算当前位总和:
total = I当前位 + J当前位 + carry - 当前位结果为
total % 10,追加到res末尾 - 更新进位为
total // 10 - 下标
i加1
- 取I的当前位数字:如果
- 最后做边界处理:题目规定0用空列表表示,因此如果最终
res的所有元素之和为0(即计算结果是0,此时res为[0]),直接返回空列表[],否则返回res即可
验证示例
比如计算999 + 2,对应输入I = [9,9,9]、J = [2]:
- i=0:total = 9+2+0=11 → res追加1,carry=1 → res=[1]
- i=1:total=9+0+1=10 → res追加0,carry=1 → res=[1,0]
- i=2:total=9+0+1=10 → res追加0,carry=1 → res=[1,0,0]
- i=3:total=0+0+1=1 → res追加1,carry=0 → res=[1,0,0,1]
- 循环结束,返回结果对应十进制1001,符合预期
内容的提问来源于stack exchange,提问作者chas108
相关产品推荐
相关产品推荐

