zoukankan      html  css  js  c++  java
  • 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去掉。

  • 相关阅读:
    转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
    使用智能移动设备访问Ossim制
    POJ 3207 Ikki's Story IV
    AndroidMainifest标签说明2——<activity>
    POJ1149 PIGS 【最大流量】
    POJ3617 Best Cow Line 馋
    颜色(color)转换为三刺激值(r/g/b)(干股)
    关于SQL中的Update语句
    Java Script 正则表达式的使用示例
    Javascript 知识点简介
  • 原文地址:https://www.cnblogs.com/zgsxh/p/9471401.html
Copyright © 2011-2022 走看看