Return sum of a number (positive or negative)

青春壹個敷衍的年華 提交于 2019-12-11 03:24:06

问题


I need to make a function that takes a number and returns sum of it's digits, if the number is negative the first digit should be considered negative when adding numbers, this is what I have:

var arrx = [];
var oper;
var others = 0;

function sumDigits(num) {
    // your code here
    var y = num.toString();
    var c = y.split("");
    c.forEach((h) => arrx.push(Number(h)) );
    if (num < 0){
        oper = -arrx[0];
        for (var z = 1; z < arrx.length; z++){
            others += arrx[z];
        }

        return others + oper;
    }

    return arrx.reduce((a,b) => a+b);
}

sumDigits(1234);

When given negative number, function returns NaN, what's the problem ?


回答1:


Use optimized and short version of sumDigits() function:

function sumDigits(num) {
  var isNeg = num < 0,   // check whether the number is negative
      numbers = (isNeg? String(num).slice(1) : String(num)).split('').map(Number);
  if (isNeg) numbers[0] *= -1;   // 'recovering' the number's sign

  return numbers.reduce(function(a,b){ return a + b; });
}

console.log(sumDigits(1234));
console.log(sumDigits(-951));



回答2:


In case of negative number, the first char is '-' the minus symbol. When you are trying to convert it to number, you are getting NaN. After that if you try to add NaN to any number the result would be NaN.

As a resolution, you need to ignore the first digit if the number is negative.

So, you can make a code change like

if(z === 1){
    others = others - arrx[z];
    }else{
     others += arrx[z];
      }

and also changing the return in case of negative numbers to return others;

Following code should work.

var arrx = [];
var oper;
var others = 0;

function sumDigits(num) {
 // your code here

var y = num.toString();

var c = y.split("");

c.forEach((h) => arrx.push(Number(h)) );

if (num < 0){


for (var z = 1; z < arrx.length; z++){

  if(z === 1){
    others = others - arrx[z];
    }else{
     others += arrx[z];
      }

}

return others;
}

return arrx.reduce((a,b) => a+b);

}
console.log(sumDigits(-1234));


来源:https://stackoverflow.com/questions/41926762/return-sum-of-a-number-positive-or-negative

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!