当前位置:首页 > JavaScript

js实现大数

2026-03-15 06:50:59JavaScript

大数相加的实现

在JavaScript中处理大数相加时,由于Number类型有精度限制(最大安全整数为2^53 - 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;
}

方法二:使用BigInt类型(ES2020+)

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

大数相乘的实现

大数相乘同样需要考虑精度问题:

字符串模拟竖式乘法

function multiplyBigNumbers(a, b) {
  if (a === '0' || b === '0') return '0';

  const m = a.length, n = b.length;
  const result = new Array(m + n).fill(0);

  for (let i = m - 1; i >= 0; i--) {
    for (let j = n - 1; j >= 0; j--) {
      const product = (a[i] - '0') * (b[j] - '0');
      const sum = result[i + j + 1] + product;
      result[i + j + 1] = sum % 10;
      result[i + j] += Math.floor(sum / 10);
    }
  }

  return result.join('').replace(/^0+/, '');
}

大数阶乘计算

计算大数阶乘时需要处理不断增长的数字:

js实现大数

function factorialBigNumber(n) {
  let result = '1';
  for (let i = 2; i <= n; i++) {
    let carry = 0;
    const temp = [];
    for (let j = result.length - 1; j >= 0; j--) {
      const product = (result[j] - '0') * i + carry;
      temp.unshift(product % 10);
      carry = Math.floor(product / 10);
    }
    while (carry > 0) {
      temp.unshift(carry % 10);
      carry = Math.floor(carry / 10);
    }
    result = temp.join('');
  }
  return result;
}

注意事项

  1. 字符串方法适用于所有JavaScript环境,但实现较复杂
  2. BigInt类型是现代浏览器和Node.js中的最佳选择(需环境支持)
  3. 处理超大数字时,字符串方法可能性能较低
  4. 实际项目中推荐使用第三方库如bignumber.js或decimal.js

以上方法根据具体需求选择,现代开发中优先考虑BigInt方案,兼容性要求高的场景可使用字符串模拟方法。

标签: 大数js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…