当前位置:首页 > JavaScript

js如何实现长整数相加

2026-01-31 06:19:56JavaScript

实现长整数相加的方法

在JavaScript中,处理超出Number.MAX_SAFE_INTEGER(即2^53 - 1)的长整数相加时,直接使用+运算符会导致精度丢失。以下是几种实现方法:

方法1:字符串模拟竖式加法

将长整数转换为字符串,按位相加并处理进位:

function addBigNumbers(a, b) {
    let i = a.length - 1;
    let j = b.length - 1;
    let carry = 0;
    let result = '';

    while (i >= 0 || j >= 0 || carry > 0) {
        const digitA = i >= 0 ? parseInt(a[i--]) : 0;
        const digitB = j >= 0 ? parseInt(b[j--]) : 0;
        const sum = digitA + digitB + carry;
        result = (sum % 10) + result;
        carry = Math.floor(sum / 10);
    }

    return result;
}

// 示例
console.log(addBigNumbers('12345678901234567890', '98765432109876543210')); // "111111111011111111100"

方法2:使用BigInt原生支持

ES2020引入的BigInt类型可直接处理大整数:

function addBigNumbers(a, b) {
    return (BigInt(a) + BigInt(b)).toString();
}

// 示例
console.log(addBigNumbers('12345678901234567890', '98765432109876543210')); // "111111111011111111100"

方法3:处理数字和字符串混合输入

兼容数字和字符串输入,自动转换为字符串处理:

js如何实现长整数相加

function addBigNumbers(a, b) {
    a = a.toString();
    b = b.toString();
    let carry = 0;
    let result = [];
    const maxLength = Math.max(a.length, b.length);

    for (let i = 0; i < maxLength; i++) {
        const digitA = parseInt(a.charAt(a.length - 1 - i) || '0');
        const digitB = parseInt(b.charAt(b.length - 1 - i) || '0');
        const sum = digitA + digitB + carry;
        result.unshift(sum % 10);
        carry = Math.floor(sum / 10);
    }

    if (carry) result.unshift(carry);
    return result.join('');
}

注意事项

  1. 输入验证:确保输入为有效数字字符串,避免非数字字符。
  2. 性能优化:对于超长数字,字符串方法的性能优于BigInt
  3. 负号处理:上述方法未处理负数,需额外判断符号位。

根据实际需求选择方法:现代环境优先使用BigInt,兼容性要求高时选择字符串模拟。

分享给朋友:

相关文章

react如何实现混入

react如何实现混入

在React中实现混入(Mixin)功能可以通过以下几种方式实现,React官方已不推荐使用传统的React.createClass混入方式,但可通过高阶组件或自定义Hook替代。 高阶组件(HOC…

java如何实现多线程

java如何实现多线程

实现多线程的方法 在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。此外,还可以使用ExecutorService等高级工具类来管理线程。 继承Thread类 通…

java是如何实现跨平台的

java是如何实现跨平台的

Java 跨平台的实现原理 Java 实现跨平台的核心机制基于 “一次编写,到处运行” 的理念,主要通过以下技术实现: 字节码与 JVM Java 源代码编译后生成字节码(.class 文件),而非…

vue如何实现ifream

vue如何实现ifream

Vue 中实现 iframe 的方法 在 Vue 中可以通过多种方式实现 iframe 的嵌入和控制。以下是几种常见的方法: 使用 HTML 原生 iframe 标签 在 Vue 模板中直接使用…

vue如何实现绑定

vue如何实现绑定

数据绑定基础 Vue 通过 v-bind 指令实现动态绑定 HTML 属性或组件 prop。基本语法为 v-bind:属性名="表达式",简写为 :属性名="表达式"。例如绑定 class 或 sty…

vue如何实现退出

vue如何实现退出

退出登录的实现方法 在Vue中实现退出登录功能通常涉及清除用户凭证、重置应用状态并跳转到登录页。以下是具体实现方式: 清除本地存储的Token 使用localStorage或sessionStora…