我需要帮助的家庭作业问题。
我必须找到加在一起的数字的总和。
function getSumOfDigits(num) {
//What goes here?
}
console.log(getSumOfDigits(42), '<-- should be 6');
console.log(getSumOfDigits(103), '<-- should be 4');
答案应该是基本的,因为这是初学javascript。
将数字转换为toString
,split
和reduce
数组的字符串:
function getSumOfDigits(num) {
return [...num.toString()].reduce((acc, curr) => +acc + +curr);
}
console.log(getSumOfDigits(42));
console.log(getSumOfDigits(103));
您可以将数字除以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))
你可以模数(%)10得到最后一位数。然后,将该数字加到sum。添加到sum后,从值中修剪最后一位数。
var value = 123456,
sum = 0;
while (value) {
sum += value % 10;
value = Math.floor(value / 10);
}
console.log(sum);
您可以使用递归方法,通过从每次调用的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 // base case hit
一旦我们打了一个getSumDigits
的电话,这个电话再也没有给getSumDigits
打电话,我们已经打到我们的基本情况,因此可以开始计算我们以前的电话。从而自下而上地工作:
getSumDigits(1) = 1 getSumOfDigits(10) = 0 +getSumDigits(1)1 = 1 getSumOfDigits(103) = 3 +getSumDigits(10)1 = 4
因此,返回的结果将是4
,如上所示。