Я новичок в 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;
}
}
Ваше 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));
Ваша проблема связана с 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))