无法进入IF声明

时间:2016-06-03 15:24:12

标签: javascript if-statement

我正在尝试用Javascript中最大的回文产品解决Project Euler问题,我不明白为什么程序没有进入IF语句if (number.toString() == number.toString().split('').reverse().join(''))

(function palyndrom(max, min) {
    
    top: 
    for (i = max; i > min; i--) {
        for (c = max; c > min; c--) {
            if(i*c == c*i) {
                alert('same was before');
            }
            
            else {
                var number = i*c;
                console.log('i*c = ' + i + '*' + c + ' = ' + number); 
    
//this if not entered, alert doesn't work
                if (number.toString() == number.toString().split('').reverse().join('')) {
                    alert('PALYNDROM FOUND: i*c = ' + i + '*' + c + ' = ' + number);
                    break top;
                }   
            }
        }
    }
})(999, 900);

2 个答案:

答案 0 :(得分:4)

i*c == c*i

总是会导致真实的。该功能永远不会到达其他部分。我想你想做的是

i === c

代替:

(function palyndrom(max, min) {
top:
    for (var i = max; i > min; i--) {
        for (var c = max; c > min; c--) {
            if (i === c) {
                alert('same was before');
            } else {
                var number = i * c;
                console.log('i*c = ' + i + '*' + c + ' = ' + number);

                if (number.toString() == number.toString().split('').reverse().join('')) {
                    alert('PALYNDROM FOUND: i*c = ' + i + '*' + c + ' = ' + number);
                    break top;
                }
            }
        }

    }
} )(999, 900);

答案 1 :(得分:0)

您错过了一个导致错误的“}” 除此之外,i * c总是等于c * i。 我修改了片段,以便它返回第一个回文。第二个函数返回所有回文的数组。 您无需验证我!== c。

(function palindrome(max, min) {
  for (var i = max; i > min; i--) {
    for (var c = max; c > min; c--) {

      var number = i * c;

      if (number.toString() == number.toString().split('').reverse().join('')) {
        console.log('PALINDROME FOUND: i*c = ' + i + '*' + c + ' = ' + number);
        return number;
      }

    }
  }

})(999, 900);
//PALINDROME FOUND: i*c = 993*913 = 906609
(function palindrome(max, min) {
  var palindromes = {};
  for (var i = max; i > min; i--) {
    for (var c = max; c > min; c--) {

      var number = i * c;

      if (!(number in palindromes) && number.toString() == number.toString().split('').reverse().join('')) {
        palindromes[number] = 1;
      }

    }
  }
  return Object.keys(palindromes);
})(999, 900);
//["819918", "824428", "861168", "886688", "888888", "906609"]