Multiplicative Persistence CoderByte JavaScript

时间:2014-12-22 15:11:14

标签: javascript callback reduce

我已经看到了其他答案,但我正试图通过回调实现自己的实践。

“使用JavaScript语言,让函数MultiplicativePersistence(num)获取传递的num参数,该参数将始终为正整数并返回其乘法持久性,这是您必须将num中的数字相乘的次数,直到达到一个数字。例如:如果num为39,那么你的程序应该返回3,因为3 * 9 = 27然后2 * 7 = 14,最后1 * 4 = 4,你停在4。“

function MultiplicativePersistence(num) { 

    function multiply(n){
       n.reduce(function(a,b){return a*b;});
    }

    var count =0;
    while(num.toString().length > 1) {      
       num= num.split("");
       num = multiply(num);
       count++;
    return count;    
    }
}

MultiplicativePersistence("39"); // Should return 3 but it's returning 1

3 个答案:

答案 0 :(得分:4)

有3个错误。

  1. 返回不应该在循环内。
  2. 在拆分之前,
  3. num应转换为字符串。
  4. multiply函数应返回结果
  5. 
    
    function MultiplicativePersistence(num) {
        
           function multiply(n){
               return n.reduce(function(a,b){return a*b;});
           }
           var count =0; 
        
           while(num.toString().length > 1) {
               num= num.toString().split("");
               num = multiply(num);
               count++;
            }
            return count;
        }
        
    alert(MultiplicativePersistence("39"));
    
    
    

答案 1 :(得分:1)

您可以使用以下解决方案来解决您的问题:

function persistenceB(num) {
    var times = 0;
    num = num.toString();
    while (num.length > 1) {
        times++;
        num = num.split('').map(Number).reduce((a, b) => a * b).toString();
    }
    return times;
}

答案 2 :(得分:0)

function persistence(num) {
 if(num.toString().length > 1){
 var mult = 1;
 var splitStr = num.toString().split('');
  for(var i = 0; i<splitStr.length; i++) {
    mult *= parseInt(splitStr[i]);
  }
    return 1 + persistence(mult);          
} else{
  return 0; 
}