PROJECT EULER P4无法得到答案

时间:2018-03-07 07:28:28

标签: javascript

问题4

回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。找到由两个3位数字的乘积制成的最大回文。

这是我的代码如下。我在两个2位数字的产品上尝试我的代码,它打印9009(正确答案)。但对于3位数字,正确的答案是906609,我的答案是956459.我不知道我的代码有什么问题,请帮忙。感谢。

let num;//product of two numbers
let paNum=[];//array for palindrome number
for(i=100;i<1000;i++)
{
    for (j=100;j<1000;j++)
    {
        num = i*j;
        str= num.toString();//change the number to a string
        if (str.substr(0,1) == str.substr(-1,1) && str.substr(1,1) == str.substr(-2,1))
        {
            paNum.push(num);
        }
        else{};
    };

};
console.log(paNum);
console.log(Math.max(...paNum));

1 个答案:

答案 0 :(得分:0)

我通过以下修改获得了正确答案。

for(i=100;i<1000;i++) {
    for (j=100;j<1000;j++){
        num = i*j;
        str= num.toString();//change the number to a string
        let len = str.length - 1;
        let checkedDigit = [];

        //Iterate the string from 0 to string length/2 and check whether it is a palindrom.
        for (k = 0; k < str.length/2; k++) {
            if (str.substr(k, 1) === str.substr(len - (len + 1 + k), 1)) {
                //If the two corresponding digits are equal, add a true. (Else false)
                checkedDigit[k] = true;
            } else {
                checkedDigit[k] = false;
            }
        }

  function checkDigit(val) {
    return val === true;
  }

  //Check whether all the elements in the checkedDigit array are true.
  if (checkedDigit.every(checkDigit)) {
    paNum.push(num);
  }

};
};
console.log(paNum);
console.log(Math.max(...paNum));