记得之前面试还被问到过用两个字符串实现两个大整数相加,当时还特别好奇好好的整数相加,为什么要用字符串去执行。哈哈,感觉当时自己还是很无知的,面试官肯定特别的无奈。今天在刷算法的时候,无意中看到了为什么要用两个字符串来实现大整数相加。所以,整理了一下。

Why?若两个整数很大的时候,直接用变量保存数字,则会造成溢出。这时候最常用也最容易的方法就是用字符串或者数组表示大数。

例如:输入‘189’,‘321’,返回‘510’。

这样在进行两个任意大的整数相加的时候,既不会溢出,也不会损失精度。

代码实现如下:(该解决办法是其他人写的,本人只是做了整理)

function sumStrings(a,b){var res='', c=0;a = a.split('');b = b.split('');while (a.length || b.length || c){c += ~~a.pop() + ~~b.pop();res = c % 10 + res;c = c>9;}return res.replace(/^0+/,'');
}
var a = '87349238473285973856723867325';
var b = '000034324382582347583275834758437853843853445';
console.log(sumStrings(a,b));

代码解析:

1. 使用split方法,将字符串转换为数组

2. 通过判断a,b,c的长度,决定是否还需要就行对应的位进行相加

3. 使用~~a.pop()的目的:保证若b的长度大于a的长度,则此时a.pop()=undefined,~~undefined=0

4. 将两个位置上的数进行相加,若大于9,则需要进位,即,将c的值存为true,这样当进行相加时,true会进行变量提升为1

5.输出最后结果的时候,由于前面可能存在0,所以使用字符串的replace方法将前面的0去掉。

Javascript实现大整数加法相关推荐

  1. javascript乘法和加法_js 大整数加法、乘法、除法

    有一定的编程经验的人都知道,当我们对数据操作的时候,若数据过大,计算机将这个大数从十进制的转为二进制的,是没有那个类型的放的了的,因此,我们经常将一个大数转化为字符串来操作.接下来我将演示大整数的加法 ...

  2. 剑指offer第12题打印从1到n位数以及大整数加法乘法

    字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后一位字 ...

  3. 1168:大整数加法--2022.01.22 AC

    /* 1168:大整数加法--2022.01.22 AC http://ybt.ssoier.cn:8088/problem_show.php?pid=1168c++中 cin.cin.get().c ...

  4. 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法

    [题目链接] ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 [题目考点] 1. 高精度 考察:高精加高精 高精度计算讲解 [解题思路] 注意:输入可能有多余的前导 ...

  5. Bailian2981 大整数加法【大数】(POJ NOI0106-10)

    问题链接:POJ NOI0106-10 大整数加法. 大整数加法 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输出 一行,即相加 ...

  6. 大整数加法基本思路和代码(C++实现)

    大整数加法基本思路和代码(C++实现) 前言 分析 编程 前言 如果给出两个很大很大的整数,这两个数大到long类型也装不下,比如100位整数,如何求它们的和呢? Java中有无敌的BigIntege ...

  7. 信息学奥赛一本通:1168:大整数加法

    1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 76804     通过数: 25726 [题目描述] 求两个不超过200位的非负整数的和. ...

  8. 大整数加法——求两个不超过200位的非负整数的和

    10:大整数加法 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输出 一行,即相加后的结果.结果里不能有多余的前导0,即如果结果是 ...

  9. 1.6编程基础之一维数组 10大整数加法

    1.6编程基础之一维数组 10大整数加法 OpenJudge - 10:大整数加法 1168:大整数加法 信息学奥赛一本通(C++版)在线评测系统 P1601 A+B Problem(高精) A+B ...

最新文章

  1. 字节最新文本生成图像AI,训练集里居然没有一张带文字描述的图片?!
  2. Tornado学习笔记(四)
  3. 性能媲美BERT却只有其1/10参数量? | 近期最火模型ELECTRA解析
  4. boost::mpl::not_equal_to相关的测试程序
  5. BOMHEAD display issue
  6. 子类继承父类后调用virtual函数问题(base.函数名)
  7. ubuntu与win10互换硬盘
  8. Unity3d地形刷入自定义树木
  9. 域名解析与邮件服务器收发问题
  10. Podfile使用说明
  11. java 多个引用指向同一个对象(含案例图解)
  12. 电大计算机网考视频,2016年12月电大计算机网考多媒体技术复习资料 整理版.doc...
  13. 软件一定存在修改的余地——《大话Java性能优化》
  14. 嵌入式岗位Makefile常见面试题(1)
  15. 用计算机怎么弹学猫叫,抖音我们一起学猫叫计算器谱分享
  16. HTML5实现中国象棋游戏
  17. 【i春秋综合渗透训练】我很简单,请不要欺负我
  18. OpenCV人脸识别之Eigenface算法(PCA特征脸方法)
  19. 一张图看懂梯度、散度、旋度、Jacobian、Hessian和Laplacian
  20. django 热启动_uwsgi 热部署 热启动 热更新

热门文章

  1. OpenWRT配置 -- 修改用户名、密码以及网页用户名的修改
  2. 兆比特每秒和兆字节每秒_网速中的“KB”“MB”“s”等字母都是啥意思,读啥,比如兆这样?...
  3. 【回顾】对话巨杉数据库核心研发团队:分布式数据库自研之路
  4. 20篇原创 5w+字,结束了这个5月
  5. Lecture 13-1
  6. Springboot使用oracle数据连接出现的表或视图不存在问题
  7. uniapp nvue 软键盘
  8. XDOJ1145--组合数学四之Carnival Phantasm
  9. 教育直播系统中不可或缺的功能部件:电子白板
  10. 压缩包批量处理工具中文免费版1.6