Javascript 算法篇之大数相加

JS 算法篇之大数相加

如果两个整数相加后大于 JS 的安全值时,JS 会以指数形式存储并导致误差,请给出一个解决方案,解决这个问题

方法一:转换为字符串处理

function bigNumSum (num1, num2) {
  let str1 = num1 + ''
  let str2 = num2 + ''
  let str1Len = str1.length
  let str2Len = str2.length
  let maxLen = str1Len > str2Len ? str1Len : str2Len
  let flag = 0
  let res = ''
  for (let i = 1; i <= maxLen; i++) {
    let temp = ~~str1[str1Len - i] + ~~str2[str2Len - i] + flag
    res = temp % 10 + res
    flag = temp > 9
  }
  return flag ? 1 + res : res
}

方法二:转换为数组处理

function bigNumSum (num1, num2) {
  let arr1 = [...(num1 + '')]
  let arr2 = [...(num2 + '')]
  let flag = 0
  let res = ''
  while (arr1.length || arr2.length) {
    let temp = ~~arr1.pop() + ~~arr2.pop() + flag
    res = temp % 10 + res
    flag = temp > 9
  }
  return flag ? 1 + res : res
}

jsperf.com 上的性能对比图如下:

可以看出,方法一略优于方法二

除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1112.html
京ICP备19044523号-1