Skip to content

实现大数相加

js
const addStrings = (a, b) => {
  let res = '';
  let i = a.length - 1;
  let j = b.length - 1;
  let flag = 0
  while(i >= 0 || j >= 0) {
    let sum = 0;
    if (i >= 0) sum += parseInt(a[i--])
    if (j >= 0) sum += parseInt(b[j--])
    // 加上上次的进位
    sum += flag;

    // 更新进位
    flag = Math.floor(sum / 10)

    // 计算值
    res = sum % 10 + res;
  }

  // 说明第一位相加 还是有进位
  if (flag > 0) {
    res = flag + res;
  }
  return res;
}

console.log(addStrings('1234', '2345')); // 输出 '3589'
console.log(addStrings('987654321098765432109876543210', '123456789012345678901234567890')); // 输出 '1111111110111111110111111111000'
console.log(addStrings('999999', '1')); // 输出 '1000000'
console.log(addStrings('0', '0')); // 输出 '0'
const addStrings = (a, b) => {
  let res = '';
  let i = a.length - 1;
  let j = b.length - 1;
  let flag = 0
  while(i >= 0 || j >= 0) {
    let sum = 0;
    if (i >= 0) sum += parseInt(a[i--])
    if (j >= 0) sum += parseInt(b[j--])
    // 加上上次的进位
    sum += flag;

    // 更新进位
    flag = Math.floor(sum / 10)

    // 计算值
    res = sum % 10 + res;
  }

  // 说明第一位相加 还是有进位
  if (flag > 0) {
    res = flag + res;
  }
  return res;
}

console.log(addStrings('1234', '2345')); // 输出 '3589'
console.log(addStrings('987654321098765432109876543210', '123456789012345678901234567890')); // 输出 '1111111110111111110111111111000'
console.log(addStrings('999999', '1')); // 输出 '1000000'
console.log(addStrings('0', '0')); // 输出 '0'