• Javascript实现大整数加法


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

    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去掉。

  • 相关阅读:
    ASP.NET 2.0 web.config数据库连接设置与读取
    一句话影评
    百度地图api示例
    centos5.8 误改/etc/fstab后导致系统进不去 解决办法
    Nginx Gzip 压缩配置
    数据库设计的三大范式
    CentOS 6.0下vncserver安装配置
    MySQL配置文件my.cnf设置
    Linux下zip加密压缩
    keepalived的log
  • 原文地址:https://www.cnblogs.com/zgsxh/p/9471401.html
Copyright © 2020-2023  润新知