JavaScript中大数相加的解法

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

在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

时间: 2024-10-18 19:21:02

JavaScript中大数相加的解法的相关文章

HDU 1047 Integer Inquiry 大数相加 string解法

本题就是大数相加,题目都不用看了. 不过注意的就是HDU的肯爹输出,好几次presentation error了. 还有个特殊情况,就是会有空数据的输入case. #include <stdio.h> #include <vector> #include <string.h> #include <algorithm> #include <iostream> #include <string> #include <limits.h

iOS中计算两个大数相加算法(OC实现)

我们知道计算机的数据类型不同,所能表示的数据量级也不相同,比如: unsigned int : 0-4294967295   int : -2147483648-2147483647 unsigned long : 0-4294967295long :  -2147483648-2147483647long long : -9223372036854775808 ~ 9223372036854775807unsigned long long : 0 ~ 18446744073709551615

java-两个大数相加

题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a="8888899999999888";  String b="88888888888888";  String str=new BigInteger(a).add(new BigInteger(b)).toString();  System.out.println(str);

理解JavaScript中的回调函数

理解回调函数,首先要知道在JavaScript中,函数也是对象,它可以赋值给变量,也可以作为参数传递给另一个函数.比如: var add=function(a,b){ console.log(a+b); }; //3 add(1,2); 这里定义了一个变量add,然后将一个匿名函数赋值给了这个变量: 接下来演示将函数作为参数传递给另一个函数,换句话说就是:将一个函数放在另一个函数(如 parent)的参数列表中,作为参数传递给parent,然后在parent函数体的某个位置执行它.其实这也就是回

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

[译]JavaScript中,{}+{}等于多少? 原文:http://www.2ality.com/2012/01/object-plus-object.html 最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得出的. 在JavaScript中,加法的规则其实很简单,只有两种情况:你只能把数字和数字相加,或者字符串和字符串相加,所有其他类型的值

高精度问题之大数相加(原来就是用字符串相加,模拟手算这么简单!)

解题心的: 就是基本的一对一模拟手算..借助c++的string 不用逆序运算了.很方便的补0.  最后处理下前导0的问题. #include <iostream> #include <string> using namespace std; // 实现大数相加 结果存放在num中 void bigIntergerAdd(string &num, string add) { int goBit = 0; // 存放进位 // 先交换下顺序 加数的位数要比较少 if (num

javascript中对字符串的操作总结

没听过一句话吗?程序员的世界,不处理字符串就是处理数组.这是群里的一位前辈和我说的,显然这和我之前理解的DOM是javascript的核心的不同的,看了几个面试题的内容,感觉前辈说的话非常的有道理,因此总结下,javascript中对字符串的操作. String类型 首先字符串类型是基本类型,但是在这里我们所说的是字符串的对象包装类型.因为只有引用类型才会有属性和方法.实际上每读取一个基本类型的同时都会创建一个对应的基本包装类型,从而让我们能够调用一些方法来操作数据.1.charAt() 和 c

JavaScript中的字符串操作

JavaScript中的字符串操作 一.概述    字符串在JavaScript中几乎无处不在,在你处理用户的输入数据的时候,在读取或设置DOM对象的属性时,在操作cookie时,当然还有更多....JavaScript的核心部分提供了一组属性和方法用于通用的字符串操作,如分割字符串,改变字符串的大小写,操作子字符串等.    当前的大部分浏览器也能从强大的正则表达式获益,因为它极大地简化了大量的字符串操作任务,不过它也需要你克服一条有些陡峭的学习曲线.在这里,主要是介绍字符串本身的一些操作,正

在 javascript 中,为什么 [1,2] + [3,4] 不等于 [1,2,3,4]?

问题 我想将一个数组追加到另一个数组的后面,于是我在 firebug 编写如下代码: [1,2] + [3,4] 但是,出乎意料,它却输出了: "1,23,4" 而没有输出我期望的: [1,2,3,4] 解答 JavaScript 的 + 运算符有两个目的: 将两个数相加: 将两个字符串连接. 规范并没有定义 + 运算符在数组上的行为,所以javascript 首先 把数组转换成字符串,然后在字符串上进行 + 运算. 如果想连接两个数组,可以使用数组的 concat 方法: [1, 2