我陷入了multiplicativePersistence算法问题。我不知道为什么这段代码不起作用

时间:2019-02-12 14:40:54

标签: javascript algorithm

让函数MultiplicativePersistence(num)接受要传递的num参数,该参数将始终为正整数,并返回其乘法持久性,这是您必须将num中的数字相乘直到达到一位数字的次数。

例如:如果num是39,则您的程序应返回3,因为3 * 9 = 27,然后2 * 7 = 14,最后是1 * 4 = 4,然后在4处停止。

我的代码运行良好。但是测试用例说这是不正确的。你们能告诉我为什么它不起作用吗?

var userInput = prompt("Enter a num:");

var MultiplicativePersistence = function(num) {
  var arr = num.toString().split('');
  var multiplicative = 1;

  for(var i = 0; i < arr.length; i++){
    if(arr.length === 1){
      return Number(arr[0]);
    } 
    multiplicative *= Number(arr[i]);
  }

  if(multiplicative < 10){
    return multiplicative;
  }

   return MultiplicativePersistence(multiplicative);
};

console.log(MultiplicativePersistence(userInput));

输入786时,测试用例说正确答案为4。 但是我认为正确答案是0。我错了吗?

1 个答案:

答案 0 :(得分:0)

您得到的答案是0,因为您的函数所做的最后一次计算是'2 * 0',它等于0。然后您将返回此值。

看起来您应该返回必须执行的乘法次数(运行函数的次数)而不是结果。

您可以通过跟踪函数在全局变量中运行的次数并返回它来解决此问题。

var userInput = prompt("Enter a num:");
var numberOfTimesFunctionRuns = 0;

var MultiplicativePersistence = function(num) {
  var arr = num.toString().split('');
  var multiplicative = 1;
  numberOfTimesFunctionRuns++;

  for(var i = 0; i < arr.length; i++){
    if(arr.length === 1){
      return numberOfTimesFunctionRuns;
    } 
    multiplicative *= Number(arr[i]);
  }

  if(multiplicative < 10){
    return numberOfTimesFunctionRuns;
  }

   return MultiplicativePersistence(multiplicative);
};

console.log(MultiplicativePersistence(userInput));