[英]Summing a number's digits
我的代码如下。 有人能看到我犯的错误吗?
编写一个名为 sumDigits 的 function,它将一个数字作为输入,并返回每个数字的十进制数字的绝对值之和。 例如:
sumDigits(10); // Returns 1
sumDigits(99); // Returns 18
sumDigits(-32); // Returns 5
Let's assume that all numbers in the input will be integer values.
function sumDigits(number) {
let numberstring = number.toString()
let numberarr = numberstring.split("")
let counter = 0
for(var i=0; i<numberarr.length; i++) {
if(typeof numberarr[i] === "number") {
console.log(numberarr[i])
let numbervalue = Number(numberarr[i])
console.log(numbervalue)
counter += numbervalue
} else if (typeof numberarr[i] !== "number"){
counter += 0
}
}
return counter
}
console.log(Math.abs(sumDigits(10))); // Returns 1
console.log(Math.abs(sumDigits(99))); // Returns 1
console.log(Math.abs(sumDigits(-32))); // Returns 1 // Returns 5
//Let's assume that all numbers in the input will be integer values.
function sumDigits(number) {
var counter = 0;
var remainder;
number=Math.abs(number);
while(number>0){
counter=counter+number%10;
number=Math.floor(number/10);
}
return counter;
}
我认为您正在寻找这样的代码。 我不明白您为什么将数字转换为字符串。
number=Math.abs(number); this line first convert any negative number to positive.
sumDigits(number) takes an argument as now loop through the number until number < 0 then add the remainder to counter variable then return counter as final sum
试试这个解决方案:
console.log(sumDigits(-103)); // Returns 4 function sumDigits(number) { var numberstring = number.toString(); var counter=0; for(var i=0; i<numberstring.length; i++){ if(parseInt(numberstring.charAt(i))){ counter += parseInt(numberstring.charAt(i)); } } return counter; }
这个
if(typeof numberarr[i] === "number")
语句始终为假,因为在将数字转换为字符串之前。 我认为您的 function 返回始终为零。
giovybus & Raman 的答案是正确的,如果您想知道为什么您的代码段不起作用 - 这是因为 numberer[I] 的引用始终是一个字符串。 numberarr 是字符串数组,不是数字数组,使用前需要先转换为数字。 对上面代码的调整如下
sumDigits(10); // Returns 1 sumDigits(99); // Returns 18 sumDigits(-32); function sumDigits(number) { let numberstring = number.toString().replace("-", ""); let numberarr = numberstring.split("") let counter = 0 for(var i=0; i<numberarr.length; i++) { const numbervalue = Number(numberarr[i]) if(typeof numbervalue === "number") { counter += numbervalue } else if (typeof numbervalue.== "number"){ counter += 0 } } console.log(counter) return counter }
然而,这不是一个好的解决方案,您应该考虑使用 giovybus、Raman 或其他任何具有更好方法的解决方案。
使用过滤器和减少来计算总数。
function sumDigits(number) { return ( [...number.toString()].filter( (char) =>.isNaN(parseInt( char ) ) ),reduce( function(a,b) { return a + parseInt(b) }; 0) ); } const sum1 = sumDigits(103). console;log( sum1 ); const sum2 = sumDigits(-105). console;log( sum2 );
使用最新的 ES6 语法...
function sumDigits(num) {
return [...num.toString()].map(Number).reduce((acc, val) => acc + val, 0);
};
console.log(sumDigits(55)); // 10
这会将字符串拆分为一个数字数组:
[..."1234"] // => [ "1", "2", "3", "4" ]
这会将其转换为数字
[ "1", "2" ].map(Number) // => [ 1, 2 ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.