两个长整数字符串求和(不允许使用ES6+)

两个长整数字符串求和(不允许使用ES6+), 面试手撸代码遇到到这个问题

1. 实现方式第一种

// 短整数字符串前边补 '0'; num需要补 '0' 的短整数字符串, len 长整数字符串的长度  
function fillZero (num, len) {
   let str = num.toString();
   if (str.length < len) {
     str = '0'.repeat(len - str.length) + str;
   }
   return str;
 }
 // 处理相加大于等于10进制问题; num1, num2 两个长度一样的长整数字符串
 function handlerCarry (num1, num2) {
   let arr = []
   for (let i = 0; i < num1.length; i++) {
     arr.push(Number(num1[i]) + Number(num2[i]))
   }
   arr = arr.reverse()
   arr.forEach((item, index) => {
     // console.log(item)
     if (item >= 10) {
       arr[index] = item - 10
       arr[index + 1] = arr[index + 1] ? arr[index + 1] + 1 : 1
     }
   })
   // console.log(arr)
   return arr.reverse().join('')
 }
 // 处理两个长整数字符串相加后返回结果字符串; num1, num2 长度不一定相等的两个长整数字符串
 function longIntStrSum (num1, num2) {
   let str = ''
   let len1 = num1.length;
   let len2 = num2.length;
   if (len1 < len2) {
     num1 = fillZero(num1, len2)
   } else if (len1 > len2) {
     num2 = fillZero(num2, len1)
   }
   str = handlerCarry(num1, num2)
   return str
 }
 let num1 = '123412412'
 let num2 = '967354215'
 console.log(longIntStrSum(num1, num2))

2. 借鉴他人的代码实现两个长整数字符串相加

function sumStrings (a, b) {
  var result = [], count = 0;
  if (a.length < b.length) b = [a, a = b][0];
  b = Array(a.length - b.length + 1).join('0') + b;
  var arrA = a.split('');
  var arrB = b.split('');
  for (var j = 0; j < a.length; j++) {
    var temp = (Number(arrA.pop()) + Number(arrB.pop())) + count;
    temp >= 10 ? [temp, count] = [temp - 10, 1] : count = 0;
    result.push(temp);
  }
  result.push(count);
  return result.reverse().join('').replace(/^0+/, '');
}
let sum = sumStrings('1234', '456789')
console.log(sum) // 458023
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值