繁体   English   中英

将数字的位数相加

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM