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

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. AC日记——大整数加法 openjudge 1.6 10

    10:大整数加法 总时间限制:  1000ms 内存限制:  65536kB 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输出 ...

  2. HDU1002——大整数加法

    题目: I have a very simple problem for you. Given two integers A and B, your job is to calculate the S ...

  3. 2981:大整数加法-poj

    2981:大整数加法 总时间限制:  1000ms 内存限制:  65536kB 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输 ...

  4. POJ 2506 Tiling(递推+大整数加法)

    http://poj.org/problem?id=2506 题意: 思路:递推.a[i]=a[i-1]+2*a[i-2]. 计算的时候是大整数加法.错了好久,忘记考虑1了...晕倒. #includ ...

  5. JavaScript实现大整数减法

    继上一篇博文写了大整数加法之后,我又模拟上篇博文的算法,自己实现了大整数减法. 大整数减法相对于加法来说,稍微复杂一点.由于要考虑一些情况: 1. 两个数相减,可能会出现结果为正.负和0三种情况: 2 ...

  6. openjudge计算概论-大整数加法

    /*=====================================================================1004:大整数加法总时间限制: 1000ms 内存限制: ...

  7. A——大整数加法(HDU1002)

    题目: I have a very simple problem for you. Given two integers A and B, your job is to calculate the S ...

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

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

  9. [CodeWars][JS]实现大整数加法

    问题描述 实现‘字符串加法’,即将两个以字符串形式表示的数字相加,得到结果然后返回一个新的字符串. 例如:输入‘123’,‘321’,返回‘444’. 这样在进行两个任意大的整数相加的时候,既不会溢出 ...

随机推荐

  1. JavaScript跨源资源共享

    CORS(跨 源资源共享)基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应式应该成功还是失败 IE对CORS的实现 IE8引入了XDR类型,与XHR类似,但可以实现安 ...

  2. rpm-yum_install_software

    rpm -ivh software_name安装软件 打印详情rpm -q software_name查询软件是否安装rpm -ql software_name查询安装目录rpm -e softwar ...

  3. jQuery----淘宝商品展示(类似与tab切换)

    实现效果如图:                 功能需求: ①鼠标进入商品名称,商品名称变色,同时对应的物品展示图片显示对应的物品,鼠标移出时候,商品名称恢复原来的颜色 实现分析: 1.HTML+CS ...

  4. Linux学习笔记(第九章)

    压缩概念: gzip和zcat: 先进版bzip2,bzcat bzip -d  已压缩文档名 bzip -z 需压缩文档名 bzcat 解压文档打印到屏幕 tar:打包指令 注意:压缩最好拿掉根目录 ...

  5. C语言中关于逗号运算符的理解

    在C语言中运算符有很多,包括算数运算符.关系运算符.赋值运算符.位运算符.逻辑运算符.三目运算符.sizeof运算符.逗号运算符等等,那今天我们就重点来给大家讨论一下关于逗号运算符的一些运算规则. 首 ...

  6. 使用uliweb自动创建表单

    1.在apps/blog目录下创建form.py文件 #coding:utf-8 from uliweb.form import* class blogform(Form): user = Strin ...

  7. PostgreSQL的psql客户端各种连接错误总结

    磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页    回到顶级页面:PostgreSQL索引页[作者 高健@博客园  luckyjackgao@g ...

  8. 09 ORM 多表操作,创建表,添加记录

    1.数据库表关系 1.一对多 为什么需要,重复字段太多 一对多关系表 Book id title price publish_id 1 python 100 1 2 php 200 2 3 go 10 ...

  9. python json.dumps中文乱码

    json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,例如: >>> import json>>> js = json.lo ...

  10. 经典笔试题:用C写一个函数测试当前机器大小端模式

    “用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...