首页 > 解决方案 > Javascript跳过相邻值未定义

问题描述

我正在尝试编写一个寻找完美和几乎完美数字的程序。

var num = readline();

function sumDivisors(num){
  var sum = 0;
  for (var i = 1; i < num; i++){
    if (!(num % i)) {
      sum += i;
    }
  }
  if ( sum == num ) {
     print(num + " perfect");
   }
  if ( (sum - num == 2) || (sum - num == -2) ) {
     print(num + " almost perfect");
   }
  if ( ( sum != num ) && (sum - num != 2) && (sum - num != -2) ) {
     print(num + " not perfect");
   }
  while(readline()){
     sumDivisors(readline());
   }
}

print(sumDivisors(num));

它接受来自用户的许多输入,并输出完美的数字,几乎完美的数字,而不是完美的......好吧,你明白了。

样本输入/输出

在此处输入图像描述

我的问题:

我快到了。上面的代码似乎工作,除了一件事。while 循环跳过相邻的值并将它们标记为undefined.

例如,当我输入 6,43,2,650,28 时,输出将是 6 - 完美,[43 将被跳过],2 - 不完美,[650 将被跳过],28 - 完美,undefined.

有问题的输出

在此处输入图像描述

标签: javascriptspidermonkey

解决方案


while(readline()){
  sumDivisors(readline());
}

这部分是问题所在。你读一行来测试它是否结束,丢弃那一行,如果不是,你读下一行来处理。保存结果并使用该行对除数求和。

由于循环内的递归,您还将有一个非常奇怪的行为。我建议您将循环提取到一个函数中,该函数调用另一个只处理一行的函数:

function findPerfectionInNumbers() {
  let line;
  while (line = readline()) {
    checkNumberForPerfection(line);
  }
}

并且您在其他函数中不进行递归。


推荐阅读