Desafio
Parece que, embora tenhamos muitos desafios que trabalham com números quadrados ou de outras formas, não temos um que simplesmente pergunte:
Dado um número inteiro n
(onde n>=0
) como entrada, retorne um valor verdadeiro se n
for um quadrado perfeito ou um valor falsey se não.
Regras
- Você pode receber informações por qualquer meio razoável e conveniente, desde que seja permitido pelas regras de E / S padrão .
- Você não precisa manipular entradas maiores do que o idioma escolhido pode manipular nativamente nem o que levaria a imprecisões de ponto flutuante.
- A saída deve ser um dos dois valores consistentes de verdade / falsey (por exemplo,
true
oufalse
,1
ou0
) - verdade se a entrada for um quadrado perfeito, falsey se não for. - Isso é código-golfe, e a menor contagem de bytes ganha.
Casos de teste
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
2**54-2
é ainda maior do que a dupla pode lidar com segurança, pelo menos em JavaScript18014398509481982 > 9007199254740991
2**54-2
em um console JS e compare o que você obtém 18014398509481982
(o valor exato). JS gera o valor exato, portanto 2**54-2
é representável com um duplo. Se isso ainda não o convencer, pegue os dados binários 0100001101001111111111111111111111111111111111111111111111111111
, interprete-os como um flutuador de precisão dupla IEEE-754 e veja qual valor você obtém.
18014398509481982
(2**54-2
), que é representável com um duplo, e causa respostas que costumamsqrt
falhar.