Codefights:正确的解决方案,但系统不接受它

时间:2016-07-15 17:40:06

标签: javascript algorithm

经验丰富的代码战士,我刚开始使用Codefight网站来学习Javascript。我已经解决了他们的任务,但系统不接受它。任务是将数字中的所有整数(个别数字)相加。例如sumDigit(111)= 3.我的代码出了什么问题?请帮我。

代码

function digitSum(n) {
    var emptyArray = [];
    var total = 0;
    var number = n.toString();
    var res = number.split("");
    for (var i=0; i<res.length; i++) {
        var numberInd = Number(res[i]);
        emptyArray.push(numberInd);

    }

    var finalSum = emptyArray.reduce(add,total);

    function add(a,b) {

        return a + b;

    }

    console.log(finalSum);
    //console.log(emptyArray);
    //console.log(res);
}

1 个答案:

答案 0 :(得分:1)

这是一个更快的技巧,用于仅使用算术求和数字的各个数字:

var digitSum = function(n) {
  var sum = 0;
  while (n > 0) {
    sum += n % 10;
    n = Math.floor(n / 10);
  }
  return sum;
};
当您将n % 10除以n时,

10是余数。实际上,这将检索数字的一位数。 Math.floor(n / 10)n10的整数除法。你可以把它想象成砍掉一个数字的数字。这意味着这段代码将这些数字加到sum中,切掉那些数字(将十位数向下移动到那些数字所在的位置)并重复这个过程直到数字等于零(即没有数字)

这比你的方法更有效的原因是它不需要将整数转换为字符串,这是一个可能代价高昂的操作。由于CodeFights主要是对算法能力的测试,因此他们很可能会寻找更多的算法答案,这就是我上面解释的答案。