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

Javascript: challenge - not getting the right answer

我正在重做 Javascript 中的欧拉计划挑战。任务是得到最大的回文数(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 中的挑战。

你快到了。您的代码的问题在于它只存储它找到的 last 回文,这不一定是最大的。如果我们稍微调整代码并添加检查以确保当前评估的产品确实大于之前找到的回文,您将得到正确答案 (906609):

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

你只是不检查新发现的回文是否比上一个发现的更高。

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

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)

试试这个...

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