Javascript: тестирование на идеальные квадраты без использования встроенной формулы квадратного корня

1

Я новичок в javascript и беру некоторые тесты на кодовом языке, я пишу код, который проверяет идеальные числа, т.е. Если число имеет squareroot, то есть целое число, оно должно возвращать true. Вот мой код, и он работает только для 0 и 1, отсюда он возвращает false даже для чисел, которые являются идеальными квадратами. Мне нужно понять, почему мой код не работает, и я не вижу, где моя проблема.

var isSquare = function(n){
      for ( var i=0; i>=0; i++){

      var product= i*i;
      if( product === n ) 
      return true;

      else if(product !==n)
      return false;

      }
    }
  • 0
    посмотри на это
Теги:

2 ответа

3

Ваше return false выполняется каждый раз, когда вход n не равен тестируемому product. То есть, на первой итерации он return false если n не равно 0. Вероятно, вы должны только return false если n меньше тестируемого product, и оставьте условие итерации, потому что тест выполняется в теле цикла:

var isSquare = function(n) {
  for (var i = 0;; i++) {
    var product = i * i;
    if (product === n) return true;
    else if (product > n) return false;
  }
}
console.log(isSquare(9));
console.log(isSquare(10));
  • 0
    вам больше не нужно, если вы можете переместить его вне цикла, так как если он не возвращает true, он вернет false
  • 0
    Я так не думаю, потому что иначе, что бы определить, когда цикл заканчивается? Обычно я знаю, что вы можете сделать это, но это не один из тех случаев, если не нужно переписывать большую часть кода
Показать ещё 2 комментария
1

Ваша проблема связана с else, если вам не нужно, если, переместите возврат за пределы цикла, он будет продолжать проверять, пока ваш цикл не станет ложным, и вам также потребуется переписать ваше логическое выражение

 var isSquare = function(n){
          for ( var i=0; i<n; i++){
    
          var product= i*i;
          if( product === n ) 
          return true;
          }
         return false;
        }
        console.log(isSquare(9))
        console.log(isSquare(4))
        console.log(isSquare(12))
  • 0
    Большое вам спасибо, ваш код работал, и я понял, где моя проблема;)
  • 0
    Помните, чтобы проголосовать, принять ответ, если это действительно поможет вам
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню