iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS实现大数相加大数相乘示例详解
  • 450
分享到

JS实现大数相加大数相乘示例详解

JS大数相加相乘JS大数 2022-11-13 14:11:10 450人浏览 泡泡鱼
摘要

目录js大数相加、大数相乘一、实现两个大数相加二、实现两个大数相乘JS大数相加、大数相乘 javascript 只有一种数字类型,可以使用也可以不使用小数点来书写数字。 在 Java

JS大数相加、大数相乘

javascript 只有一种数字类型,可以使用也可以不使用小数点来书写数字。

JavaScript 中,数字不分为整数类型和浮点数类型,所有的数字都是浮点数类型JavaScript 采用 IEEE754 标准定义的 64 位浮点格式表示数字,此格式用 64 位存储数值。其中 0~51存储数字片段,52~62存储指数,63 位存储符号。

来看看 JavaScript 中数字的最大值最小值

console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Number.MIN_VALUE); // 5e-324

注:

这里的最大值指的是字面意思上的最大值;

最小值则指的是正数情况下小数点后能表示的最小值。

一、实现两个大数相加

思路:

大数可能会超出 JavaScript数字类型范围,超出后结果损失精度,所以可以用字符串的方式来存储大数。

题解:

let a = "9876543210123456789000000000123";
let b = "1234567898765432100000012345678901";
function add(str1, str2) {
  // 获取两个数字的最大长度
  let maxLength = Math.max(str1.length, str2.length);
  // 用0补齐长度,让它们两个长度相同
  str1 = str1.padStart(maxLength, 0); // "0009876543210123456789000000000123"
  str2 = str2.padStart(maxLength, 0); // "1234567898765432100000012345678901"
  let temp = 0; // 每个位置相加之和
  let flag = 0; // 进位:相加之和如果大于等于10,则需要进位
  let result = "";
  for(let i=maxLength-1; i>=0; i--) {
    // 获取当前位置的相加之和:字符串1 + 字符串2 + 进位数字
    temp = parseInt(str1[i]) + parseInt(str2[i]) + flag;
    // 获取下一个进位
    flag = Math.floor(temp/10);
    // 拼接结果字符串
    result = temp%10 + result;
  }
  if(flag === 1) {
    // 如果遍历完成后,flag还剩1,说明两数相加之后多了一位,类似于:95 + 10 = 105
    result = "1" + result;
  }
  return result;
}

二、实现两个大数相乘

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。

思路:

  • 首先,两个多位数相乘,我们可以分解成其中一个多位数另一个多位数的每一位相乘
    • 这里利用的思路和上面的大数相加一致
  • 得到其每一位相乘的结果后,在其结果后面补齐相应的0,并将其放入结果数组
  • 最后,用上述大数相加的函数,对结果数组进行累加,即可得到最终的相乘字符串了。
  • 需要注意的点是相乘的两数其中之一可能是0,所以最后一步需要将左侧的0(除了最右边的一位)全部去掉
function multiply(str1, str2) {
  let result = "";
  const multiplyArr = [];
  let count = 0; // 当前位数(从个位开始)
  // 用位数少的每一位去乘位数多的,这样需要的存储空间更小,运算速度更快
  if(str1.length < str2.length) {
    [str1, str2] = [str2, str1];
  }
  // 循环用第二个数的每一位乘以第一个数
  for(let i=str2.length-1; i>=0; i--) {
    let multiplyItem = manyMultiplyOne(str1, str2[i]); // 获取多位数乘单位数的结果
    multiplyArr[count] = multiplyItem.padEnd(multiplyItem.length + count, "0"); // 进行补0操作
    count++;
  }
  // 接下来,将multiplyArr中的每一项累加,就能得到最终的结果了
  result = multiplyArr[0] // 从第一个开始累加
  for(let i=1; i<multiplyArr.length; i++) {
    result = add(result, multiplyArr[i]);
  }
  // 去除末尾以外的前置0
  result = removeLeftZero(result);
  return result;
}

function manyMultiplyOne(many, one) {
  let temp = 0; // 每个位置相乘的结果
  let flag = 0; // 进位数
  let result = "";
  // 进行每一位的乘法运算,并进行进位操作(从后往前操作,代表从最小位置开始:个十百千万)
  for(let i=many.length-1; i>=0; i--) {
    temp = many[i] * one + flag; // 获取当前项的乘积
    flag = Math.floor(temp/10); // 获取进位数
    result = temp%10 + result;
  }
  // 最后,如果进位还要剩下,则将进位放在最前面
  if(flag !== 0) {
    result = flag + result;
  }
  return result;
}
// 两数相加,用的上面介绍的函数
function add(str1, str2) {
  // 获取两个数字的最大长度
  let maxLength = Math.max(str1.length, str2.length);
  // 用0补齐长度,让它们两个长度相同
  str1 = str1.padStart(maxLength, 0); // "0009876543210123456789000000000123"
  str2 = str2.padStart(maxLength, 0); // "1234567898765432100000012345678901"
  let temp = 0; // 每个位置相加之和
  let flag = 0; // 进位:相加之和如果大于等于10,则需要进位
  let result = "";
  for(let i=maxLength-1; i>=0; i--) {
    // 获取当前位置的相加之和:字符串1 + 字符串2 + 进位数字
    temp = parseInt(str1[i]) + parseInt(str2[i]) + flag;
    // 获取下一个进位
    flag = Math.floor(temp/10);
    // 拼接结果字符串
    result = temp%10 + result;
  }
  if(flag === 1) {
    // 如果遍历完成后,flag还剩1,说明两数相加之后多了一位,类似于:95 + 10 = 105
    result = "1" + result;
  }
  return result;
}
function removeLeftZero(str) {
  let count = 0; // 计算从头部开始,有几个0
  for(let i=0; i<str.length; i++) {
    if(str[i] === "0" && i < str.length - 1) {
      count++;
    } else {
      break;
    }
  }
  return str.substr(count, str.length);
}

以上就是JS实现大数相加大数相乘示例详解的详细内容,更多关于JS大数相加相乘的资料请关注编程网其它相关文章!

--结束END--

本文标题: JS实现大数相加大数相乘示例详解

本文链接: https://www.lsjlt.com/news/171945.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS实现大数相加大数相乘示例详解
    目录JS大数相加、大数相乘一、实现两个大数相加二、实现两个大数相乘JS大数相加、大数相乘 JavaScript 只有一种数字类型,可以使用也可以不使用小数点来书写数字。 在 Java...
    99+
    2022-11-13
    JS大数相加相乘 JS大数
  • python下大数相加
    s1=input('please enter number:') s2=input('please enter number:') L1=[0] L2=[0] for i in range(0,len(s1)): L1.append(i...
    99+
    2023-01-31
    大数 python
  • 模拟大数相加
    字符串的大数相加,不可以直接使用stoi,或者stoll这种函数去相加,随时有可能越界。只需要模拟计算加法的过程就可以了。 定义两个尾指针,指向num1,nums2的最后一个数字,让这两个数字相加,并把相加的结果记录下来;但是我们还需要考...
    99+
    2023-10-12
    c++ 大数相加
  • python3两数相加的实现示例
    两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表...
    99+
    2024-04-02
  • 怎么在java中实现两个大数相加
    怎么在java中实现两个大数相加?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码如下:public class BigIntAdd {priva...
    99+
    2023-05-30
    java
  • php怎么实现两个数相乘
    这篇文章主要介绍“php怎么实现两个数相乘”,在日常操作中,相信很多人在php怎么实现两个数相乘问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php怎么实现两个数相乘”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-05
  • php如何实现两个数相乘
    PHP是一种常用的服务器端脚本语言,可以用于开发各种 Web 应用程序。本文将介绍如何使用 PHP 实现两个数相乘的功能。在 PHP 中,可以使用 "*" 运算符来进行乘法计算。下面是一个简单的 PHP 程序,演示如何将...
    99+
    2023-05-14
    php
  • OpenCV实现相机标定示例详解
    目录环境准备相机标定棋盘格图片实时显示相机的画面在线标定实时显示相机画面,按键保存能检测到角点的棋盘格图片离线标定畸变矫正环境准备 vs2015+opencv4.10安装与配置 相机...
    99+
    2024-04-02
  • C++实现算法两个数字相加详解
    Add Two Numbers 两个数字相加 You have two numbers represented by a linked list, where each n...
    99+
    2024-04-02
  • uniapp自定义相机实现示例详解
    目录自定义相机起因利用livePusher实现使用效果图拓展实现多种自定义相机水印相机身份证相机人像相机自定义相机 起因 由于最近用uniapp调用原生相机容易出现闪退问题,找了很...
    99+
    2023-03-09
    uniapp自定义相机 uniapp 相机实现
  • php如何实现两个最大值相加
    这篇文章主要介绍“php如何实现两个最大值相加”,在日常操作中,相信很多人在php如何实现两个最大值相加问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何实现两个最大值相加”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • C语言计算大数相加的方法
    本文实例为大家分享了C语言计算大数相加的具体代码,供大家参考,具体内容如下 问题描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 算法描述   由于a和b都比较...
    99+
    2024-04-02
  • python怎么用lambda函数实现两个数相乘
    这篇文章给大家分享的是有关python怎么用lambda函数实现两个数相乘的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用lambda函数实现两个数相乘python的数据类型有哪...
    99+
    2024-04-02
  • Python实现数字小写转大写的示例详解
    目录前言代码实现测试补充前言 这绝对是个非常有趣的问题哈哈,但用python列表实现就变得比较烧脑,正常人不会非常较真这样的程序,我也只是闲来无事,如果代码还是有bug,那么我也没办...
    99+
    2022-12-14
    Python数字小写转大写 Python 小写转大写 Python 数字 小写 大写
  • LeetCode中两数相加的示例分析
    小编给大家分享一下LeetCode中两数相加的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目描述给定两个非空链表来代表两个非负整数。数字最高位位于链表...
    99+
    2023-06-19
  • Golang实现Biginteger大数计算实例详解
    正文 Golang中的big.Int库支持大数计算,基于这个库封装了一层Bitinteger,支持字符串类型的大数,加减乘除等计算。 其他计算可以参考基于big.Int来实现。 pa...
    99+
    2024-04-02
  • js二进制数据及其互相转化实现详解
    目录filefile文件base64Blobblob的用法ArrayBufferArrayBuffer的使用FileReaderFileReader的使用二进制类型数据的互相转化fi...
    99+
    2023-02-27
    js二进制数据互相转化 js二进制数据转化
  • js日历相关函数使用详解
    本文实例为大家分享了js日历相关函数的具体代码,供大家参考,具体内容如下 1、获取某年某月第一天是周几 getMonthStartDay(year, month, index) { ...
    99+
    2024-04-02
  • 如何使用C语言计算大数相加
    这篇文章给大家介绍如何使用C语言计算大数相加,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储器...
    99+
    2023-06-15
  • 大数据之Kafka————java来实现kafka相关操作
    一、在java中配置pom junit junit 4.11 test org.apache.kafka kafka-clients 2.8....
    99+
    2023-09-23
    大数据 kafka java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作