Skip to content

Latest commit

 

History

History
51 lines (39 loc) · 1.58 KB

08-两数相加.md

File metadata and controls

51 lines (39 loc) · 1.58 KB

08-两数相加


题目描述:

请你用 javascript 实现两个字符串数字相加(大数相加)?


思路:

  • 这道题考查两个超过 js 最大数值的数相加,可运用小学数学加法规律实现. 个十百千万...位相加,满十进一。

参考答案:

function add(a, b) {
  // 看看两个字符串长度相差多少,小的在前面补0, 如 10000 和 1, 补0后为 10000 和 00001
  let leng = Math.abs(a.length - b.length);
  if (a.length > b.length) {
    b = Array(leng).join('0') + '0' + b;
  } else if (a.length < b.length) {
    a = Array(leng).join('0') + '0' + a;
  }
  // 将字符串转化为数组并且倒装,如同小学加法从个位开始算起
  let textArrA = a.split('').reverse(),
    textArrB = b.split('').reverse(),
    resultArr = [];

  // 对数组进行循环
  for (let i = 0; i < a.length; i++) {
    // 求和,和小于10,则将和放进目标数组,若大于10,将除以10将余数放进目标数组,然后textArrA数组的下一位 + 1(textArrB数组也可以,选一个即可)
    let sum = parseInt(textArrA[i]) + parseInt(textArrB[i]);

    // 这里判断是否是最高位数值相加,即i === a.length - 1, 如果是不用取余直接放进去
    if (parseInt(sum / 10) === 0 || i === a.length - 1) {
      resultArr.push(sum);
    } else {
      resultArr.push(sum % 10);
      textArrA[i + 1] = parseInt(textArrA[i + 1]) + 1;
    }
  }
  // 最后将目标数组倒装一下,再转成字符串
  return resultArr.reverse().join('');
}

console.log(add('1045747', '10')); // 1045757