blog icon indicating copy to clipboard operation
blog copied to clipboard

实现大整数相加

Open wuxianqiang opened this issue 4 years ago • 0 comments

function add (num1, num2) {
  let result = []
  let curry = 0
  let i = num1.length - 1;
  let j = num2.length - 1;
  while (i >= 0 || j >= 0) {
    let n1 = i >= 0 ? Number(num1[i]) : 0;
    let n2 = j >= 0 ? Number(num2[j]) : 0;
    let num = n1 + n2 + curry;
    curry = Math.floor(num / 10);
    result.unshift(num % 10);
    i--;
    j--;
  }
  if (curry === 1) result.unshift(1);
  return result.join('')
}

如果有浮点数,可以拆开计算

function add(num1, num2) {
  let result = []
  let curry = 0
  let i = num1.length - 1;
  let j = num2.length - 1;
  let max = Math.max(i, j);
  while (max >= 0) {
    let n1 = Number(num1[max]) || 0
    let n2 = Number(num2[max]) || 0
    let num = n1 + n2 + curry;
    curry = Math.floor(num / 10);
    result.unshift(num % 10);
    max--;
  }
  return {
    int: curry,
    float: result.join('')
  }
}

function sum(num1, num2) {
  let [a, b = '0'] = num1.split('.')
  let [x, y = '0'] = num2.split('.')
  let { int, float } = add(b, y)
  let total = Number(a) + Number(x) + Number(int)
  float = float.replace(/0+$/g, '')
  if (float) {
    total += `.${float}`
  }
  return total
}

console.log(sum('11.7', '0.3'))

wuxianqiang avatar Mar 29 '20 03:03 wuxianqiang