当前位置:首页 > JavaScript

js如何实现长整数相加

2026-01-31 06:19:56JavaScript

实现长整数相加的方法

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

js如何实现长整数相加

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

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

js如何实现长整数相加

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:处理数字和字符串混合输入

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

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,兼容性要求高时选择字符串模拟。

分享给朋友:

相关文章

vue如何实现计算

vue如何实现计算

Vue 计算属性的实现方法 在 Vue 中,计算属性(computed properties)是一种基于响应式依赖进行缓存的属性,适用于处理复杂逻辑或依赖其他数据属性的场景。以下是实现计算属性的几种方…

vue如何实现id

vue如何实现id

Vue 中实现 ID 的方法 在 Vue 中,可以通过多种方式为元素或组件分配唯一的 ID。以下是几种常见的方法: 使用 v-bind 绑定 ID 通过 v-bind 动态绑定 ID,可以在模板中直…

vue如何实现ifream

vue如何实现ifream

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

vue如何实现修改

vue如何实现修改

修改 Vue 组件或数据 在 Vue 中修改数据或组件状态通常涉及响应式数据的更新、组件方法的调用或状态管理工具的使用。以下是几种常见场景的实现方式: 修改响应式数据 Vue 的响应式系统会自动追踪…

vue如何实现分页

vue如何实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的分页数据和前端的分页组件。前端需要处理页码切换、数据请求和渲染逻辑。 后端API分页参数 后端API通常需要接收分页参数,例如pag…

vue 分页如何实现

vue 分页如何实现

实现 Vue 分页的几种方法 使用 Element UI 分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成。安装 Element UI 后,直接引入组件并…