前端使用在 JavaScript 方法, 实现大数相加,是如何实现的?

179 阅读2分钟

在 JavaScript 中,由于数字的精度限制,通常的数值计算无法直接处理非常大的整数。为了实现大数相加,我们可以使用字符串来存储数字,然后逐位相加,模拟手工加法的过程。

下面是一个简单的实现大数相加的函数:

function addBigNumbers(num1, num2) {
    // 将输入的数字字符串反转,方便从低位到高位逐位相加
    let n1 = num1.split('').reverse();
    let n2 = num2.split('').reverse();
    
    let maxLength = Math.max(n1.length, n2.length);
    let carry = 0; // 进位
    let result = [];

    for (let i = 0; i < maxLength; i++) {
        // 当前位的数字,如果对应位不存在则取0
        let digit1 = i < n1.length ? parseInt(n1[i], 10) : 0;
        let digit2 = i < n2.length ? parseInt(n2[i], 10) : 0;

        // 当前位相加的结果
        let sum = digit1 + digit2 + carry;

        // 计算新的进位
        carry = Math.floor(sum / 10);

        // 计算当前位的值并加入结果
        result.push(sum % 10);
    }

    // 如果最后还有进位,加入结果中
    if (carry > 0) {
        result.push(carry);
    }

    // 将结果数组反转回来,并连接成字符串
    return result.reverse().join('');
}

// 测试
let num1 = "123456789012345678901234567890";
let num2 = "987654321098765432109876543210";
console.log(addBigNumbers(num1, num2)); // 输出: 1111111110111111111011111111100

代码解析:

  1. 反转字符串

    • 因为加法从低位到高位进行,所以将输入的数字字符串反转过来,方便逐位相加。
  2. 逐位相加

    • 通过遍历最长的字符串的长度,逐位对齐相加。如果一方长度不足,则补0处理。
    • 每一位相加时,同时考虑进位。
  3. 处理进位

    • 在每次相加后,如果结果大于或等于10,计算出新的进位值,并在下一位相加时加入进位。
  4. 反转结果并返回

    • 最后,将结果反转回正确的顺序,并以字符串形式返回。

这个方法虽然简单,但对于任意长度的整数都适用,是一个常见的处理大数计算的方法。