【问题标题】:Multiplicative Persistence CoderByte JavaScript乘法持久性 CoderByte JavaScript
【发布时间】:2014-12-22 15:11:13
【问题描述】:

我已经看到了其他答案,但我正在尝试通过回调实践来制作自己的答案。

“使用 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

【问题讨论】:

  • 您忘记了multiply 中的return

标签: javascript callback reduce


【解决方案1】:

有 3 个错误。

  1. 返回不应在循环内。
  2. num 在拆分前应转换为字符串。
  3. multiply 函数应该返回结果

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      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; 
      }
      

      【讨论】:

        【解决方案4】:
        const persistence = num => {
          return `${num}`.length > 1 
            ? 1 + persistence(`${num}`.split('').reduce((a, b) => a * +b)) 
            : 0;
        }
        

        【讨论】:

        • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多