# 👉 数组应用
# 求和问题
# 交集、差集
# 数组形式的整数加法
难点:边界进位和进位
给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和。
var addStrings = function(num1, num2) {
const len1 = num1.length;
const len2 = num2.length;
if (!len1 && !len2) {
return 0;
}
let i = len1 - 1;
let j = len2 - 1;
let carry = 0;
let result = "";
while (i >= 0 || j >= 0) {
let number1 = i >= 0 ? +num1[i] : 0;
let number2 = j >= 0 ? +num2[j] : 0;
let sum = number1 + number2 + carry;
result = (sum % 10) + result;
carry = Math.floor(sum / 10);
i--;
j--;
}
if (carry) {
result = carry + result;
}
return result;
};
var multiply = function(num1, num2) {
const len1 = num1.length;
const len2 = num2.length;
if (!len1 && !len2) return 0;
if ((len1 === 1 && num1[0] === 0) || (len2 === 1 && num2[0] === 0))
return 0;
// 一个n位数和一个m位数相乘,最多会有n+m位数
let result = 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--) {
const multi = n1 * num2[j] + result[i + j + 1];
// 当前位
result[i + j + 1] = multi % 10;
// 向前进位
result[i + j] = Math.floor(multi / 10) + result[i + j];
}
}
while (result[0] === 0) {
result.shift();
}
return result.length ? result.join("") : "0";
};