算法——大数相加

2022-04-06  本文已影响0人  darkTi

浏览器可以计算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"))
上一篇下一篇

猜你喜欢

热点阅读