题目
题目描述
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”
提示:
1 <= num1.length, num2.length <= 200
num1 和 num2 只能由数字组成。
num1 和 num2 都不包含任何前导零,除了数字0本身。
题解
这个问题要求我们模拟两个大整数的乘法运算,而不使用任何内置的大整数库或直接将字符串转换为整数。这实际上是要我们实现一个类似于手算乘法的过程,但用编程语言来表达。
解决思路
-
初始化结果数组:由于两个长度分别为
m
和n
的数字相乘,其结果最多有m + n
位,因此我们可以预先分配一个长度为m + n
的数组result
来存储每一位的结果。 -
逐位相乘:从右向左遍历
num1
和num2
的每一位,计算它们的乘积,并将结果添加到result
数组中相应的位置。注意,num1[i] * num2[j]
的结果应该加到result[i + j + 1]
上(这里假设索引从0开始)。 -
处理进位:在完成所有位的相乘之后,需要从前向后遍历
result
数组,处理每一位上的进位问题,确保每个位置上的值都在 0-9 之间。 -
构建结果字符串:最后,根据
result
数组构建最终的结果字符串。需要注意的是,如果result
数组以 0 开头且长度大于1,则表示结果是 0;否则,去掉前导零并拼接成字符串返回。 -
特殊情况处理:如果任一输入为 “0”,则直接返回 “0”,因为任何数与 0 相乘都是 0。
Python 实现代码
以下是按照上述思路实现的 Python 代码:
def multiply(self, num1: str, num2: