415. 字符串相加(Python)

如题所述

第1个回答  2022-06-19

难度:★★☆☆☆
类型:字符串

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何内建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

这道题就是让我们实现小学学的多位数的加法运算,与 【题目371. 两整数之和类似】 ,做完这两道题,我们就学会了使用二进制和十进制进行加法计算的流程。我们可以回顾一下两个多位数的加法流程:

算法上,我们需要注意:

1. 处理字符与数值的关系。 数值的计算需要将单个字符转换为对应的数字,这里我们使用ascii码方式,计算任意数字字符num_char的方式为:ord(num_char) - ord('0'),例如字符'0'对应的数字为ord('0')-ord('0')=0;

2. 关于遍历顺序。 输入数字按字符串形式给出,我们从最低位向最高位计算,需要将输入字符串做逆序调整(也可以在索引时逆序索引,但是这样比较麻烦);

3. 关于如何循环。 循环的控制条件需要从最低位遍历到两个数中较长的字符串的长度,我们需要考虑输入的两个数字长度不同的情况,因此逆序提取两个数字的对应位时,需要考虑输入数字在这一位上有没有数值,这里根据下标索引与所提取的字符串的长度之间的关系来进行判定,如果其中一个字符串没有这一位,则当前位设置为零,例如"123"和"45"相加,需要遍历到百位,而且两个数字中提取出的百位分别是"1"和"0";

4. 不要忽略进位的作用。 每一位的计算不仅需要两个数字对应位的值,还需要考虑上一步的进位,且当前位的计算结果可能大于10,这时也需要向更高位进位;另外,在循环遍历结束之后,如果仍然有进位,我们还需要把进位添加到更高位上。例如"99"和"1"相加,循环结束后我们需要把十位上的进位"1"放在结果的更高位百位上。

编码如下:

如有疑问或建议,欢迎评论区留言~

相似回答
大家正在搜