【问题标题】:Add digits of a number together and return the sum [closed]将数字的数字相加并返回总和[关闭]
【发布时间】:2019-04-07 06:10:35
【问题描述】:

一个我需要帮助的家庭作业问题。

我必须找到加在一起的 num 的总和。

function getSumOfDigits(num) {
    //What goes here?
}

console.log(getSumOfDigits(42), '<-- should be 6');

console.log(getSumOfDigits(103), '<-- should be 4');

考虑到这是初学者 javascript,答案应该是基本的。

【问题讨论】:

标签: javascript digits


【解决方案1】:

toStringsplit it 和reduce 将数字变成字符串:

function getSumOfDigits(num) {
  return [...num.toString()].reduce((acc, curr) => +acc + +curr);
}

console.log(getSumOfDigits(42));
console.log(getSumOfDigits(103));

【讨论】:

  • .reduce((acc, curr) =&gt; +acc + +curr)(少一次迭代)
【解决方案2】:

您可以将数字除以 10 并使用模数 10 来提取最后一位:

function getSumOfDigits(num) {
    let sum = 0;
    while (num > 0) {
        sum += (num % 10);
        num = Math.floor(num / 10);
    }
    return sum;
}

console.log(getSumOfDigits(42))
console.log(getSumOfDigits(102))

【讨论】:

  • 这是 IMO 的好方法,而不是更改为字符串而不是拆分而不是循环并再次更改回数字。 +1
【解决方案3】:

您可以取模 (%) 10 来获得最后一位数字。然后,将该数字相加。 添加到 sum 后,从 value 中删除最后一位。

var value = 123456,
    sum = 0;

while (value) {
    sum += value % 10;
    value = Math.floor(value / 10);
}

console.log(sum);

【讨论】:

    【解决方案4】:

    您可以使用递归方法,通过从每次调用中取出 num 的最后一个数字并将其与从 0 到 n-1 的整数总和相加(其中 n 是号码)

    请看下面的例子:

    const getSumOfDigits = num => 
      num < 10 ? num : num%10 + getSumOfDigits(~~(num / 10))
    
    console.log(getSumOfDigits(42), '<-- should be 6');
    console.log(getSumOfDigits(103), '<-- should be 4');

    上面的函数是这样工作的,在这个例子中,我将输入num设为103:

    getSumOfDigits(103) = 3 + getSumDigits(10) getSumOfDigits(10) = 0 + getSumDigits(1) getSumDigits(1) = 1 // 基本情况命中

    一旦我们对getSumDigits 的调用不再返回对getSumDigits 的调用,我们就达到了我们的基本情况,因此可以开始计算我们之前的调用是什么。因此自下而上地工作:

    getSumDigits(1) = 1 getSumOfDigits(10) = 0 + getSumDigits(1) 1 = 1 getSumOfDigits(103) = 3 + getSumDigits(10) 1 = 4

    因此,返回的结果将是4,如上所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多