100% 原创
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var add = function(a, b) {
a = a + '';
b = b + '';
if (a.length < b.length) {
let temp = a;
a = b;
b = temp;
}
let len = a.length;
a = a.split('').reverse();
b = b.split('').reverse();
let result = [];
for (let i = 0; i < len; ++i) {
result[i] = result[i] || 0;
let res = parseInt(a[i]) + parseInt(b[i] || 0) + result[i];
if (res > 9) {
result[i] = res % 10;
result[i + 1] = (result[i + 1] || 0) + Math.floor(res / 10);
} else {
result[i] = res;
}
}
return result.reverse().join('');
}
var multiply = function(num1, num2) {
// 保证 num1 长度 >= num2
if(num1.length < num2.length) {
temp = num1;
num1 = num2;
num2 = temp;
}
let len1 = num1.length;
let len2 = num2.length;
let adders = [];
for(let i = 0; i < len1; ++i) {
for(let j = 0; j < len2; ++j) {
const a = parseInt(num1[i]);
const b = parseInt(num2[j]);
adders.push({
value: a * b,
exp: len1 - i + len2 - j - 2,
});
}
}
// console.log(JSON.stringify(adders));
adders.sort((a, b) => a.exp - b.exp);
for(let i = 0; i < adders.length - 1; ++i) {
while(adders[i].exp === adders[i + 1].exp) {
adders[i].value = add(adders[i].value, adders[i + 1].value);
adders.splice(i + 1, 1);
i--;
}
}
// console.log(JSON.stringify(adders));
for(let i = 0; i < adders.length; ++i) {
let obj = adders[i];
if (parseInt(obj.value) > 9) {
adders[i + 1] = adders[i + 1] || {
value: 0,
exp: i + 1,
};
let str = obj.value + '';
obj.value = str[str.length - 1];
adders[i + 1].value = add(adders[i + 1].value, str.slice(0, str.length - 1));
}
}
let result = adders.map(el => el.value).reverse();
while(result.length > 1 && result[0] == 0) {
result.shift();
}
return result.join('');
};