最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

callback - Multiplicative Persistence CoderByte JavaScript - Stack Overflow

programmeradmin2浏览0评论

I've seen other answers but I'm trying to make my own with a callback for pratice.

"Using the JavaScript language, have the function MultiplicativePersistence(num) take the num parameter being passed which will always be a positive integer and return its multiplicative persistence which is the number of times you must multiply the digits in num until you reach a single digit. For example: if num is 39 then your program should return 3 because 3 * 9 = 27 then 2 * 7 = 14 and finally 1 * 4 = 4 and you stop at 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

I've seen other answers but I'm trying to make my own with a callback for pratice.

"Using the JavaScript language, have the function MultiplicativePersistence(num) take the num parameter being passed which will always be a positive integer and return its multiplicative persistence which is the number of times you must multiply the digits in num until you reach a single digit. For example: if num is 39 then your program should return 3 because 3 * 9 = 27 then 2 * 7 = 14 and finally 1 * 4 = 4 and you stop at 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
Share Improve this question edited Dec 22, 2014 at 15:53 Sampath Liyanage 4,8962 gold badges31 silver badges41 bronze badges asked Dec 22, 2014 at 15:11 Alexandra ChenAlexandra Chen 211 silver badge3 bronze badges 1
  • You forgot the return in multiply. – Bergi Commented Dec 22, 2014 at 15:21
Add a ment  | 

4 Answers 4

Reset to default 4

There were 3 mistakes.

  1. The return should not be inside the loop.
  2. num should be converted to string before splitting.
  3. multiply function should return the results

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

You can use the following solution to solve your problem:

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;
}
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; 
}
const persistence = num => {
  return `${num}`.length > 1 
    ? 1 + persistence(`${num}`.split('').reduce((a, b) => a * +b)) 
    : 0;
}
发布评论

评论列表(0)

  1. 暂无评论