当前位置:首页 > 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:处理数字和字符串混合输入

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

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

js如何实现长整数相加

分享给朋友:

相关文章

vue如何实现目录组件

vue如何实现目录组件

实现目录组件的基本思路 在Vue中实现目录组件通常需要结合页面内容的结构化数据(如标题层级),通过动态渲染生成可交互的目录。核心步骤包括提取标题、生成目录结构、实现滚动联动等。 提取标题信息 通过d…

vue如何实现两栏布局

vue如何实现两栏布局

使用Flexbox实现两栏布局 Flexbox是CSS3中强大的布局方式,可以轻松实现两栏布局。在Vue中可以直接在组件的style标签中使用。 <template> <div…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

如何实现语音react

如何实现语音react

语音识别基础设置 在React中实现语音识别功能通常需要借助浏览器的Web Speech API或第三方库。Web Speech API提供了SpeechRecognition接口,允许应用程序直接访…

java如何实现多线程

java如何实现多线程

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

如何实现vue验证

如何实现vue验证

Vue 表单验证的实现方法 Vue 表单验证可以通过多种方式实现,包括内置指令、第三方库和自定义验证逻辑。以下是几种常见的方法: 使用 Vue 内置指令进行基础验证 Vue 提供了 v-mod…