问题:
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
解题思路:
小学生乘法公式一样计算,一位一位的乘,逢10进1,数组取返回,是为了方便从左向右的遍历习惯。
答案:
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
let num1 = "2", num2 = "3";
let multiply = function (num1, num2) {
if (num1 === '0' || num2 === '0') return "0";
let arr1 = num1.split('').reverse();
let arr2 = num2.split('').reverse();
let len1 = arr1.length;
let len2 = arr2.length;
let arr = [];
for (i = 0; i < len1; i++) {
for (let j = 0; j < len2; j++) {
if (arr[i + j] == undefined) {
arr[i + j] = arr1[i] * 1 * (arr2[j] * 1);
} else {
arr[i + j] += arr1[i] * 1 * (arr2[j] * 1);
}
if (arr[i + j] > 9) {
if (arr[i + j + 1] == undefined) {
arr[i + j + 1] = Math.floor(arr[i + j] / 10);
} else {
arr[i + j + 1] += Math.floor(arr[i + j] / 10);
}
arr[i + j] = arr[i + j] % 10;
}
}
}
return arr.reverse().join('');
};