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

算法——大数相加

作者: 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"))

相关文章

  • [算法] 大数相加

    看到个有意思的问题 “给定2个整数,这两个数大的连long类型都装不下,如何计算两数和” 实践了一下,可以用数组存...

  • 算法——大数相加

    浏览器可以计算15位数字的加减,对于16位的数字它就搞不定了,但是,最近出了bigint数据类型,可以在16位及以...

  • 大数相加算法

    1、题目:实现两个大数相加。2、算法流程:(1)大数可能超出任何一种整数类型,会引发溢出问题,所以用字符串的格式存...

  • OC大数相加相乘算法

    前些天做了份笔试题,最后一道题是写一个大数相乘的算法,太久没做题了,也没有草稿纸,脑子没动起来,笔就开始天马行空了...

  • 前端-大数相加

    大数相加

  • 大数相加

    大数相加类

  • JSCoding

    大数相加 深拷贝

  • 大数相加

    大数相加(java) 一、BigDecimal工具类 二、转换为字符串解法

  • 20181125_ARTS_W8

    Algorithm(至少一个算法题) 415. Add Strings题目描述:两个用字符串表示的大数相加解题思路...

  • JS大数字相加

    问:如何计算大数字的相加?大到可以溢出的那种。 大数字相加,避免使用传统的相加(可能会溢出),所以使用数学题的思路...

网友评论

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

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