美文网首页
算法——大数相加

算法——大数相加

作者: darkTi | 来源:发表于2022-04-06 17:46 被阅读0次

    浏览器可以计算15位数字的加减,对于16位的数字它就搞不定了,但是,最近出了bigint数据类型,可以在16位及以上位数的数字最后加上n,就可以进行相加了;
    下面我们用算法来演示如何进行大数相加;
    前提:这两个参数肯定是字符串类型,不能是数字类型,因为number类型无法表示出来这么大的数字(不考虑bigint)

    1、进行竖式计算,对应位进行相加,一旦相加超过10,那么相当于溢出,overflow为true,后一位相加时要多加1;


    image.png
    const add = (a, b)=>{
      //找出两数中位数较大的位数
      const maxLength = Math.max(a.length, b.length)
      
      //声明出overflow和总和
      let overflow = false
      let sum = ''
      
      //从第1位开始进行相加,加到最大的那一位
      //这里第1位其实就是数字最右边那一位
      for(let i=1; i < maxLength; i++){
        // const a1 = a[a.length - 1] a的最右边一位 
        //如果那一位上没有数字了,就赋值为0  
        const ai = a[a.length - i] || '0' 
        const bi = b[b.length - i] || '0' 
        
        //把相同位上的数字最为整数相加
        let ci = parseInt(ai) + parseInt(bi) + parseInt(overflow ? 1 : 0)
        overflow = ci >= 10
    
        //如果溢出那么ci最后结果应该减去10
        ci = overflow ? ci - 10 : ci
        
        //把每一位得到的数字和之前的数字拼接在一起
        //注意顺序不能混!!!一定是ci在前面
        sum = ci + sum  
      }
      
      //最后进行到最左边一位时,如果这一位是溢出的,那么要在头位上加上'1'
      sum = overflow ? '1' + sum : sum
      return sum
    }
    
    console.log(add("11111111101234567","77777777707654321"))
    

    相关文章

      网友评论

          本文标题:算法——大数相加

          本文链接:https://www.haomeiwen.com/subject/mhesjrtx.html