Javascript:挑战 - 没有得到正确的答案

时间:2016-10-17 22:10:00

标签: javascript loops palindrome

我正在重做Javascript中的Project Euler挑战。任务是得到最大的回文数(https://projecteuler.net/problem=4)。现在我得到以下代码:

var lpp = 0;
  for (var a = 0; a < 1000; a++) {
    for (var b = 0; b < 1000; b++) {
      var str = (a*b).toString();
      if (str.charAt(0) === str.charAt(5)) {
        if (str.charAt(1) === str.charAt(4)) {
          if (str.charAt(2) === str.charAt(3)) {
            lpp = str;
          }
        }
      }
    }
  }
  console.log(lpp);

代码的输出是580085,我知道这是错误的答案,因为我以前在Python中遇到了挑战。

3 个答案:

答案 0 :(得分:2)

你几乎就在那里。您的代码存在的问题是它只存储了找到的最后回文,这不一定是最大的。如果我们稍稍调整代码并添加一个检查,表明当前评估的产品确实比之前找到的回文大,那么您将得到正确答案(906609):

&#13;
&#13;
var lpp = 0;
  for (var a = 0; a < 1000; a++) {
    for (var b = 0; b < 1000; b++) {
      var tmp = a*b;
      if (tmp < lpp) {
          continue;
      }
      var str = tmp.toString();
      if (str.charAt(0) === str.charAt(5)) {
        if (str.charAt(1) === str.charAt(4)) {
          if (str.charAt(2) === str.charAt(3)) {
            lpp = tmp;
          }
        }
      }
    }
  }
  console.log(lpp);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您只是不要检查新发现的回文是否高于找到的

此外,只迭代3位数字并使用str.split("").reverse().join("")进行字符串恢复。

&#13;
&#13;
var lpp = 0
for (var a = 100; a < 1000; a++) 
    for (var b = 100; b < 1000; b++) 
    {
        var mult = a * b
        var str = (mult).toString()
        if (str == str.split("").reverse().join("") && mult > lpp)
             lpp = mult
    }
console.log(lpp)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

试试这个......

var lpp = 0;
for (var a = 0; a < 1000; a++) {
    for (var b = 0; b < 1000; b++) {
        var str = (a * b).toString();
        var j = str.length - 1;
        var count = 0;
        for (var i = 0; i < str.length ; i++) {
            if (str.charAt(i) != str.charAt(j)) {
                count++;
                break;
            }
            j--;
        }
        if (count == 0)
            lpp = str;
    }
}
console.log(lpp);