数字的所有数字的总和

时间:2017-05-03 21:14:20

标签: javascript

给定问题: 写一个名为“sumDigits”的函数。

给定一个数字,“sumDigits”返回其所有数字的总和。

var output = sumDigits(1148);
console.log(output); // --> 14

如果数字为负数,则第一个数字应计为负数。

var output = sumDigits(-316);
console.log(output); // --> 4

我的代码:

function sumDigits(num) {
  return num.toString().split("").reduce(function(a, b){
    return parseInt(a) + parseInt(b);
  });
}

我的代码解决了正整数的问题。关于如何解决负整数问题的任何提示?拜托,谢谢。

编辑:如果给定的数字为0怎么办?在这种情况下,添加if语句是否可以返回0?

4 个答案:

答案 0 :(得分:5)

检查第一个字符是否为-。如果是这样,b是您的第一个数字,应该是否定的:

function sumDigits(num) {
  return num.toString().split("").reduce(function(a, b){
    if (a == '-') {
      return -parseInt(b);
    } else {
      return parseInt(a) + parseInt(b);
    }
  });
}

答案 1 :(得分:4)

您可以使用String#match代替String#split来获取新数组。

function sumDigits(num) {
    return num.toString().match(/-?\d/g).reduce(function(a, b) {
        return +a + +b;
    });
}

console.log(sumDigits(1148)); // 14
console.log(sumDigits(-316)); // 4

答案 2 :(得分:2)

正在寻找没有reduce功能等的解决方案的人可以采用这种方法。

function sumDigits(num) {
        
        var val = 0, remainder = 0;
            
        var offset = false;
        if (num <0) {
            offset = true;
            num = num * -1;
        }
        
        while (num) {
            remainder = num % 10;
            val += remainder;
            num = (num - remainder) / 10;
        }

        if (offset) {
            val -= 2 * remainder;//If the number was negative, subtract last 
                                 //left digit twice
        }

        return val;

    }

    var output = sumDigits(-348);
    console.log(output); 
    output = sumDigits(348);
    console.log(output);
    output = sumDigits(1);
    console.log(output);

答案 3 :(得分:0)

//Maybe this help: // consider if num is negative:
function sumDigits(num){

  let negativeNum = false;
  if(num < 0){
    num = Math.abs(num);
    negativeNum = true;
  }
  let sum = 0;
  let stringNum = num.toString()
  for (let i = 0; i < stringNum.length; i++){
    sum += Number(stringNum[i]);
  }
    if(negativeNum){
      return sum - (Number(stringNum[0]) * 2);
   // stringNum[0] has the "-" sign so deduct twice since we added once    
  } else {
      return sum;
  }
}