js实现两个字符串类型的数字求和

题目:

/*
完成一个add方法,完成两个字符串类型的数字相加,并返回这个结果。
注意:这两个数字的值可能会很大,大的会超出javascript所能计算的最大数值。
例:
*/
add("123", "321"); // "444"
add("11", "99"); // "110"
add('987429134712934876249385134781395873198472398562384958739845234859234758913759182357398457398474598237459823745928347538',
              '835743829547328954732895474893754893753281957319857432958432548937859483265893274891378593187431583942678439217431924789');// '1823172964260263830982280609675150766951754355882242391698277783797094242179652457248777050585906182180138262963360272327'

我的思路

  1. 把两个字符串分割成数组,并且数组的每位元素代表一位
  2. 比较两个数值谁的位数最多,说明这个数值比较大
  3. 循环,做类似于加法的操作,逢十进一
function add(a, b) {
  var number1,number2,MAX_LENGTH,result=[];
 //比较两个数值谁的位数多,循环时用
  if(a.length>b.length){
    number1 = a.split('').reverse()
    number2 = b.split('').reverse()
    MAX_LENGTH = a.length
  }else{
    number1 = b.split('').reverse()
    number2 = a.split('').reverse()
    MAX_LENGTH = b.length
  }
  // 做加法,因为前面做了数组翻转,所以这个相当于从个位开始计算
  for(var i = 0;i=10){
      // 逢十进一
      result[i+1] = '1'
    }
  }
  
 // 最后结果处理
  return result.reverse().join('')
}

厉害的解法

function add (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
   // 判端下一位计算时是否需要+1
    c = c > 9
  }
  return res
}

你可能感兴趣的:(js实现两个字符串类型的数字求和)