当前位置:首页 > JavaScript

js实现大数

2026-03-15 06:50:59JavaScript

大数相加的实现

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

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

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

大数相乘的实现

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

js实现大数

字符串模拟竖式乘法

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+/, '');
}

大数阶乘计算

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

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实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

使用js实现

使用js实现

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

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…