实现一个add方法,用于计算俩个较大的数相加或者相乘

实现一个能够处理较大数相加或相乘的 JavaScript 函数可以涉及到对大整数的处理。在 JavaScript 中,数字的范围是有限的,但你可以使用字符串来表示大整数。

以下是一个简单的 JavaScript 函数,用于处理两个大整数的相加和相乘。这里假设输入的数是非负整数。

思路

个位相加,到10进一,该位变为0,十位相加,到10进一,该位变为0,以此类推。

位数不够补0,比如9999+12,那就相当于9999+0012

javascript 复制代码
function add(a, b) {
  // 补齐位数,使两个数字长度相等
  while (a.length < b.length) {
    a = '0' + a;
  }
  while (b.length < a.length) {
    b = '0' + b;
  }

  let carry = 0; // 进位
  let result = '';

  // 从末尾开始逐位相加
  for (let i = a.length - 1; i >= 0; i--) {
    const sum = parseInt(a[i]) + parseInt(b[i]) + carry;
    carry = Math.floor(sum / 10); // 计算进位
    result = (sum % 10) + result; // 将当前位的结果添加到最前面
  }

  // 处理最高位的进位
  if (carry > 0) {
    result = carry + result;
  }

  return result;
}

function multiply(a, b) {
  let result = '0';

  // 从低位到高位逐位相乘
  for (let i = a.length - 1; i >= 0; i--) {
    let tempResult = '';
    let carry = 0;

    // 乘法的核心逻辑
    for (let j = b.length - 1; j >= 0; j--) {
      const product = parseInt(a[i]) * parseInt(b[j]) + carry;
      carry = Math.floor(product / 10);
      tempResult = (product % 10) + tempResult;
    }

    // 处理最高位的进位
    if (carry > 0) {
      tempResult = carry + tempResult;
    }

    // 在当前位之后添加零,类似于小学的竖式乘法
    for (let k = a.length - 1; k > i; k--) {
      tempResult = tempResult + '0';
    }

    // 相加得到最终结果
    result = add(result, tempResult);
  }

  return result;
}

// 示例
const num1 = '987654321987654321';
const num2 = '123456789123456789';

console.log(add(num1, num2));      // 输出 '1111111111111111110'
console.log(multiply(num1, num2)); // 输出 '121932631112635269095498763473798607301'

这是一个简单的实现,实际上,处理大整数的库可能会提供更好的性能和更多的功能。

相关推荐
骑着蜗牛撵大象32725 分钟前
LangChain 工具调用从声明到闭环:给智能体接上真实的手脚
前端
数据掘金36 分钟前
百度统计后台页面数据异常?从手动调用时机开始排查
前端
hunteritself37 分钟前
10 层 4K 实时剪辑,国产工作站进入广电制作核心
大数据·前端·人工智能·深度学习·transformer
踩着两条虫38 分钟前
我在浏览器里“盖”了一个村:Vue + Three.js 大屏开发踩坑记
前端·vue.js·three.js
默_笙41 分钟前
🧀 让大模型的答案"流"出来:NestJS AI 模块 + SSE + RxJS 实战
javascript·人工智能
mbshqqb43 分钟前
TypeScript基础教程之同步生成器
前端·javascript·typescript
Gigavision1 小时前
DEAP数据集 2026最新Transformer算法 DEAP 数据集 下载
深度学习·算法·transformer
嘟嘟同学和妮妮同学1 小时前
【升级】一个中国历史可视化站:皇帝时间线梳理、古代思想流派、诗词鉴赏 (2)
前端·html
夜之眷属1 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
暗夜行者之光1 小时前
LangGraph + MCP 实战:构建"自然语言查数据"的 ChatBI Agent
前端·后端