/**
* 加法(两个非负数相加)
* @param {String} num1
* @param {String} num2
* @return {String}
*/
const addition = (num1, num2) => {
// 用数组接长数字
const list1 = [];
for (let i1 = 0; i1 < num1.length; i1++) {
list1.unshift(Number(num1[i1]));
}
const list2 = [];
for (let i2 = 0; i2 < num2.length; i2++) {
list2.unshift(Number(num2[i2]));
}
// 开始加法计算
const len = list1.length > list2.length ? list1.length : list2.length;
let isCarry = false;
let sums = [];
for (let i3 = 0; i3 < len; i3++) {
const sum = (isCarry ? 1 : 0) + (list1[i3] || 0) + (list2[i3] || 0);
isCarry = sum >= 10;
sums.unshift(sum % 10);
}
// 最后进位
if (isCarry) sums.unshift(1);
// 返回string
return sums.reduce((a, b) => a + b, "");
};
/**
* 乘法(两个非负数相乘)
* @param {String} num1
* @param {String} num2
* @return {String}
*/
const multiplication = (num1, num2) => {
const _num2 = Number(num2);
const adds = [];
for (let i1 = num1.length - 1; i1 >= 0; i1--) {
adds.push(_num2 * Number(num1[i1]));
}
let sum = "0";
adds.forEach((e, i) => {
let num = e.toString();
for (let i0 = 0; i0 < i; i0++) {
num += "0";
}
sum = addition(sum, num);
});
return sum;
};
const str = multiplication("99856", "98754");
console.log("测试乘法", str);
【算法练习】实现两个String数字相加,相乘
最新推荐文章于 2024-07-26 20:46:33 发布