LeetCode题解-43.字符串相乘(双层循环 进位)
题目
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
示例 1:
1 | 输入: num1 = "2", num2 = "3" |
示例 2:
1 | 输入: num1 = "123", num2 = "456" |
说明:
num1
和num2
的长度小于110。num1
和num2
只包含数字 0-9。num1
和num2
均不以零开头,除非是数字 0 本身。- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
分析
两数相乘,假设A有n1位,B有n2位,则乘积结果为n1+n2-1位(最高位无进位)或n1+n2位(最高位有进位),即相乘的结果最多有n1+n2位。
以123与45相乘为例,计算过程实际为错位相乘相加,第2个数的每一位依次与第1个数的每一位错位相乘,再将相乘的结果相加,编程实现就是使用两层for循环,这里使用一个数组来存放最终的字符串形式的结果,在for循环的每一次计算中,都会更新结果数组中的两位,一位是当前计算位,它是某两位置相乘加上本位之前的结果再对10取余,另一位是该结果的进位制,累加到前一位,用于下次计算。
1 | 1 2 3 |
C++实现
1 | class Solution |
运行结果
输入
1 | "123" |
输出
1 | "5535" |
-------------纸短情长 下次再见-------------
关注微信公众号,获取更多精彩~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 码农爱学习的博客!
评论