给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"按照算数的乘法操作一位位的进行相乘,因为每次相乘都有可能有进位,
初始化一个数组,长度为两个字符串长度和,每位都设置为0,因为相乘最大的位数不会超过两数长度之和
遍历两个字符串,然后逐位相乘,两个数字相乘后 res[i + j + 1] 保存当前位数的值,然后res[i + j]保存进位
最终将结果转为字符串,因为初始res为m + n位,有可能结果位数不到这么多,但结果位数可以确认最低为 m + n - 1, 截取掉第一位
var multiply = function(num1, num2) {
if (num1 == '0' || num2 == '0') return '0';
let add = 0;
let m = num1.length;
let n = num2.length;
let res = new Array(m + n).fill(0);
for (let i = m - 1; i >= 0; i--) {
let val1 = Number(num1[i]);
for (let j = n - 1; j >= 0; j--) {
let val2 = Number(num2[j]);
let sum = val1 * val2 + res[i + j + 1]
res[i + j + 1] = sum % 10;
//进制位累加
res[i + j] = res[i + j] + Math.floor(sum / 10);
}
}
//将结果转化为字符串
res = res.join('')
if (res[0] == 0) {
//结果最低为m + n - 1位数
res = res.slice(1)
}
return res;
};