🌸题目
🍁给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
1 | 输入: num1 = "2", num2 = "3" |
说明:
- num1 和 num2 的长度小于110。
- num1 和 num2 只包含数字 0-9。
- num1 和 num2 均不以零开头,除非是数字 0 本身。
- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
🍁方法:模拟横竖乘法
算法流程
竖式运算思想,以num1为123, num2为456 为例分析:
num2每一位与num1进行相乘,每一步的结果进行 累加。
注意:
- num2除了第一位的其他位与
- num1运算的结果需要 补0
- 计算字符串数字累加其实就是415.字符串相加
1 | public String multiply(String num1, String num2) { |
🍁竖式优化
该算法是通过两数相乘时,乘数某位与被乘数某位相乘,与产生结果的位置的规
律来完成。具体规如下:
- 乘数num1位数为M,被乘数num2位数为N,
- num1 x num2结果
- res大总位数为M+N
- numl[i] x num2[j]的结果为tmp (位数为两位, “0x” ,”xy”的形式),第一位位于res[i+j] ,第二位位于res[i+j+1] 。
1 | public String multiply2(String num1, String num2) { |