一、两个大正整数字符串相加

在JavaScript中,数值类型满足不了大数据容量计算,可以用字符串进行操作
 1 function add(strNum1, strNum2) {
 2   // 将传进来的数字/数字字符串调用toString方法转换成字符串,并进行切割,专成数组
 3   let splitNum1 = strNum1.toString().split(''),
 4     splitNum2 = strNum2.toString().split('')
 5
 6   // 判断两个数组的长度,进行值的互换,将splitNum1设置为最长的值,方便后续计算
 7   if (splitNum1.length < splitNum2.length) {
 8     let temp = splitNum1
 9     splitNum1 = splitNum2
10     splitNum2 = temp
11   }
12
13   // carry: 进位值; currentNum: 相加之后,除以10的余数; sum: 相加的值
14   let len1 = splitNum1.length,
15     len2 = splitNum2.length,
16     carry = 0,
17     currentNum = 0,
18     sum = 0
19
20   // len1递减到1之后,循环体中的len1 - 1 = 0 即可拿到下标为零的数组元素,
21   // 所以这里条件是 大于 0,下面len2 > 0 同理
22   while (len1 > 0) {
23     if (len2 > 0) {
24       sum = parseInt(splitNum1[len1 - 1]) + parseInt(splitNum2[len2 - 1]) + carry
25     } else {
26       sum = parseInt(splitNum1[len1 - 1]) + carry
27     }
28     carry = Math.floor(sum / 10) // 进位数值
29     currentNum = sum % 10 // 取余数,作为当前位置的数值
30     splitNum1[len1 - 1] = currentNum // 设置当前值
31
32     // 相加之后,数值长度都递减
33     len1--
34     len2--
35   }
36   // 判断是否还有进位
37   if (carry) {
38     splitNum1.unshift(1)
39   }
40   return splitNum1.join('')
41 }
42 let result = add(9527, 2019)
43
44 console.log('result :', result) // result : 11546

备注:

在做大数相加,突然想到平时使用 数字.toString 方法会报错,
但是作为函数参数传进来,直接调用toString方法却不会报错,
上网搜索了下原因,记录了下来,传送门:Number和toString中的坑

转载于:https://www.cnblogs.com/linjunfu/p/10645498.html

JavaScript中大数相加的解法相关推荐

  1. javascript乘法和加法_JavaScript大数相加相乘的实现方法实例

    前言 JavaScript 中的最大安全整数是 2 ^{53} – 1 ,即 9007199254740991,当我们进行超出这个范围的数值计算的时候就无法得到精确的值,而是一个近似值,比如我们计算 ...

  2. js浮点数/大数相加

    1. 浮点数相加 console.log(0.1 + 0.2); //0.30000000000000004 console.log(0.1 + 0.2 === 0.3); //false 原因在于 ...

  3. [译]JavaScript中,{}+{}等于多少?

    最近,Gary Bernhardt在一个简短的演讲视频"Wat"中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解 ...

  4. 大数相乘、大数相加、大数相减Java版本

    为什么80%的码农都做不了架构师?>>>    题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...

  5. JavaScript中的字符串操作(转)

    http://www.cnblogs.com/xuebin/articles/1296837.html 最近编一个javascript的翻译程序,发现无法正确比较两个字符串的相等,上网查了查,发现这篇 ...

  6. 两个函数式解决大数相加的方法

    解决大数相加的方法有很多,网上很容易搜到,下面介绍两种,一种是在网上抄的,一种是自己想的,我将他们都用函数式的方式重写了一遍. 这种是在网上抄的,的确非常简洁 function add(a,b) {l ...

  7. Javascript中的Callback方法浅析

    什么是callback?   回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函 ...

  8. Javascript中的陷阱大集合【译】

    参考:http://www.2cto.com/kf/201111/111203.html 昨天晚上在自己的个人技术博客上翻译了一篇有关Javascript的文章,今天想想还是把它投稿到博客园吧,大家可 ...

  9. es6 依赖循环_探索 JavaScript 中的依赖管理及循环依赖

    我们通常会把项目中使用的第三方依赖写在 package.json 文件里,然后使用 npm .cnpm 或者 yarn 这些流行的依赖管理工具来帮我们管理这些依赖.但是它们是如何管理这些依赖的.它们之 ...

最新文章

  1. [AVR]使用AVR单片机驱动舵机
  2. 【TDS学习文档4】IBM Directory schema的管理2——object class
  3. MySQL 高级 游标介绍
  4. python网络爬虫系列(七)——selenium的介绍 selenium定位获取标签对象并提取数据 selenium的其它使用方法
  5. base64 convert to file
  6. bzoj 3039: 玉蟾宫(悬线法)
  7. Qt5学习笔记之串口助手二:发送接收实现
  8. 9.GitLab 汉化
  9. [linux命令]基本命令
  10. ctfhub(rce智慧树)
  11. 李践《行动日志——目标管理》观后感
  12. WinRAR 曝出代码执行漏洞,你的官方中文无广告版该升级了
  13. onenote2019导入_将OneNote 2007笔记本导入Evernote
  14. docker装LibreELEC_Linux和macOS系统安装LibreELEC的方法
  15. Intel SGX官网
  16. 君莫笑:小白的堆(bai_dui)
  17. 使用Canal ClientAdapter实现Mysql的DDL、DML同步到PostgreSQL
  18. 记录一下Python的11个小技巧
  19. iOS应用组件化/模块化探究
  20. 手把手教你脑电波采集及信号处理分析 - 知乎

热门文章

  1. post 图片 byte 如何展示_图片展示:道路排水工程如何进行标准化施工
  2. 小学二年级上学期计算机教案,小学二年级上学期信息技术教案范文【三篇】
  3. 了解SQL Server SELECT INTO语句
  4. python opencv_Python open()
  5. android数据绑定_Android数据绑定
  6. rxjava教程_RxJava教程
  7. git 报错 Repository Not Found
  8. 小议C++中函数的参数的传递
  9. 开课吧:数据分析的价值体现在哪些方面?
  10. Java基础如何运用FileOutputStream