【问题标题】:Return sum of a number (positive or negative)返回数字的总和(正数或负数)
【发布时间】:2017-01-29 22:38:42
【问题描述】:

我需要做一个函数,它接受一个数字并返回它的数字之和,如果数字是负数,那么在添加数字时第一个数字应该被认为是负数,这就是我所拥有的:

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);

当给定负数时,函数返回NaN,这是什么问题?

【问题讨论】:

  • c 已经是一个时,为什么要将数字推送到数组中?
  • 我建议开发一种直接处理数字的算法,而不是将数字转换为字符串。你能想出一种从数字中获取个位的方法吗?除了个位数之外,您如何获得其余数字?

标签: javascript arrays sum digits


【解决方案1】:

使用优化的短版sumDigits()函数:

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));

【讨论】:

  • 我无法理解数字的价值。如果我写出来,会是这样吗? if(isNeg) { String(num).slice(1); } else { String(num); } numbers.split('').map(Number); ?
  • @FrancisNgo,您忘记将条件结果分配给numbers
  • var numbers = if(isNeg) { String(num).slice(1); } else { String(num); } numbers.split('').map(Number); ?
  • 不,if(isNeg) { numbers = String(num).slice(1); } else { numbers = String(num); } 。但它看起来并不比原来的好多少
【解决方案2】:

如果是负数,第一个字符是'-' 减号 符号。当您尝试将其转换为数字时,您会收到NaN。之后,如果您尝试将NaN 添加到任何数字,结果将是NaN

作为一种解决方法,如果数字为负数,您需要忽略第一个数字。

所以,你可以像这样修改代码

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

并将负数的返回值更改为return others;

以下代码应该可以工作。

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));

【讨论】:

  • 如果我忽略它,如果是负数,结果就不好了。
  • 检查帖子中的代码,它应该可以工作,除了returnif 条件之外,它几乎相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多