一.给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
二.思路
双层循环 模拟乘法 数字倒序相乘 取余 取整 相加
难点:当列的位置
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function (num1, num2) {
const len1 = num1.length;
const len2 = num2.length;
let pos = new Array(len1 + len2).fill(0);
for (let i = len1 - 1; i >= 0; i--) {
let n1 = +num1[i];
for (let j = len2 - 1; j >= 0; j--) {
let n2 = +num2[j];
const p = n1 * n2;
const sum = pos[i + j + 1] + p;
pos[i + j + 1] = sum % 10;
pos[i + j] += sum / 10 | 0;
}
}
let str = pos.join('');
while (str[0] == '0') {
str = str.slice(1);
}
return str.length ? str : '0'
};
三.知识点
转数字 +‘ 131’ //131
取余 num1 % num2
取整 num | 0
截取 str.slice(start,end) 包前不包后