首页 > 解决方案 > 对负数的位数求和

问题描述

'编写一个名为 sumDigits 的函数,该函数将一个数字作为输入并返回该数字的每个小数位的总和。

如何将第一个数字为负数的数字相加?

例如:sumDigits(-32); // -3 + 2 = -1;

我能够部分解决它。

function sumDigits(number) {
  return Math.abs(number).toString().split("").reduce(function(a, b) {
    return parseInt(a) + parseInt(b);
  }, 0);
}

console.log( sumDigits(-32) );

标签: javascriptreduce

解决方案


简单的数学和递归可以轻松解决这个问题。

回想一下,当您将一个数字除以 10 时,余数是它的最右边的十进制数字,商的整数部分是由剩余数字组成的数字。换句话说:

let n = 5678;
console.log(n % 10); // => 8
console.log(Math.floor(n / 10)); // => 567

考虑到这一点,对数字求和是一个简单的递归过程:

程序(n

  1. 将n除以10。
    • 数字设置为余数。
    • n设置为商的整数部分。
  2. 如果n= 0,则返回digit
  3. 否则,返回数字+过程(n

保留最左边数字的符号会增加少量的复杂性,但不会太多。下面是它在 JavaScript 中的样子:

function digitSum(n, sign=1) {
  if (n < 0) {
    sign = -1; // Save the sign
    n = Math.abs(n);
  }

  const digit = n % 10; // Remainder of |n÷10|
  n = Math.floor(n / 10); // Integer part of |n÷10|

  if (n === 0) {
    return sign * digit; // No digits left, return final digit with sign
  }
  return digit + digitSum(n, sign); // Add digit to sum of remaining digits
}

console.log(digitSum(32)); // => 5
console.log(digitSum(-32)); // => -1


推荐阅读