实现一个add方法,用于计算俩个较大的数相加或者相乘
实现一个能够处理较大数相加或相乘的 JavaScript 函数可以涉及到对大整数的处理。在 JavaScript 中,数字的范围是有限的,但你可以使用字符串来表示大整数。
以下是一个简单的 JavaScript 函数,用于处理两个大整数的相加和相乘。这里假设输入的数是非负整数。
思路
个位相加,到10进一,该位变为0,十位相加,到10进一,该位变为0,以此类推。
位数不够补0,比如9999+12,那就相当于9999+0012
function add(a, b) {
// 补齐位数,使两个数字长度相等
while (a.length < b.length) {
a = '0' + a;
}
while (b.length < a.length) {
b = '0' + b;
}
let carry = 0; // 进位
let result = '';
// 从末尾开始逐位相加
for (let i = a.length - 1; i >= 0; i--) {
const sum = parseInt(a[i]) + parseInt(b[i]) + carry;
carry = Math.floor(sum / 10); // 计算进位
result = (sum % 10) + result; // 将当前位的结果添加到最前面
}
// 处理最高位的进位
if (carry > 0) {
result = carry + result;
}
return result;
}
function multiply(a, b) {
let result = '0';
// 从低位到高位逐位相乘
for (let i = a.length - 1; i >= 0; i--) {
let tempResult = '';
let carry = 0;
// 乘法的核心逻辑
for (let j = b.length - 1; j >= 0; j--) {
const product = parseInt(a[i]) * parseInt(b[j]) + carry;
carry = Math.floor(product / 10);
tempResult = (product % 10) + tempResult;
}
// 处理最高位的进位
if (carry > 0) {
tempResult = carry + tempResult;
}
// 在当前位之后添加零,类似于小学的竖式乘法
for (let k = a.length - 1; k > i; k--) {
tempResult = tempResult + '0';
}
// 相加得到最终结果
result = add(result, tempResult);
}
return result;
}
// 示例
const num1 = '987654321987654321';
const num2 = '123456789123456789';
console.log(add(num1, num2)); // 输出 '1111111111111111110'
console.log(multiply(num1, num2)); // 输出 '121932631112635269095498763473798607301'
这是一个简单的实现,实际上,处理大整数的库可能会提供更好的性能和更多的功能。