题目
此题强烈建议查看参考资料学习
代码
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
// 模拟乘法
var multiply = function(num1, num2) {
let len1 = num1.length;
let len2 = num2.length;
let res = new Array(len1 + len2).fill(0);
// 双重遍历模拟乘法
for (let i = len1-1; i >= 0; i--) {
for (let j = len2-1; j >= 0; j--) {
// 模拟相加
let p1 = i+j;
let p2 = i+j+1;
let mul = num1[i] * num2[j];
let sum = mul + res[p2];
res[p2] = sum%10;
res[p1] += parseInt(sum/10);
}
}
// 数组左边的字符可能为0
let i = 0;
while(res[i] == '0') i++;
// 数组中除了前面为0的字符,其他字符组成一个字符串
let str = '';
for (; i<res.length; i++) {
str += res[i];
}
// 将数组去前导零,并组成一个字符串
// let str = '';
// let hasZero = true;
// for (let i = 0; i < res.length; i++) {
// if (res[i] != '0') {
// hasZero = false;
// }
// if (!hasZero) {
// str += res[i];
// }
// }
return str.length === 0 ? '0' : str;
};
参考资料
- [字符串乘法计算(https://labuladong.gitee.io/algo/4/32/135/)