Вызов
Итак, кажется, что, хотя у нас есть множество задач, которые работают с квадратными числами или числами других фигур, у нас нет такой, которая просто спрашивает:
Если в качестве входных данных указать целое число n
(где n>=0
), верните истинное значение, если n
это идеальный квадрат, или значение Фолси, если нет.
правила
- Вы можете принимать ввод любым разумным и удобным способом, если это разрешено стандартными правилами ввода / вывода. .
- Вам не нужно обрабатывать входные данные, которые больше, чем те, которые выбранный вами язык может обрабатывать изначально, и которые могут привести к неточностям с плавающей запятой.
- Выходными данными должно быть одно из двух последовательных значений истинности / ложности (например,
true
илиfalse
,1
или0
) - true, если вход является идеальным квадратом, и false, если это не так. - Это код-гольф, поэтому выигрывает меньшее количество байт.
Тестовые случаи
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
2**54-2
он по-прежнему больше, чем может безопасно обработать double, по крайней мере в JavaScript18014398509481982 > 9007199254740991
2**54-2
в консоль JS и сравните то, что вы получите 18014398509481982
(точное значение). JS выводит точное значение, поэтому 2**54-2
представляется двойным. Если это все еще не убеждает вас, возьмите двоичные данные 0100001101001111111111111111111111111111111111111111111111111111
, интерпретируйте их как число с плавающей запятой IEEE-754 и посмотрите, какое значение вы получите.
18014398509481982
(2**54-2
), который является представим с двойным, и вызывает ответы , что использованиеsqrt
на провал.