跳到主要内容

LeetCode:43. 字符串相乘

方法一

/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function (num1, num2) {
if (num1 === '0' || num2 === '0') return '0'

const len1 = num1.length
const len2 = num2.length
const res = new Array(len1 + len2).fill(0)

// 从个位开始计算
for (let i = len1 - 1; i >= 0; i--) {
// 第二个数也从个位开始计算
for (let j = len2 - 1; j >= 0; j--) {
// res[i+j+1] 上次计算的进位值
const temp = num1[i] * num2[j] + res[i + j + 1]
// 个位值
res[i + j + 1] = temp % 10
// 进位数,也加上之前的值
res[i + j] += Math.floor(temp / 10)
}
}
// 清除首位 0
res[0]===0 && res.splice(0,1)

return res.join('')
};

方法二

/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
return (BigInt(num1) * BigInt(num2)).toString()
};