Ontem, enquanto brincava com meu filho, notei o número em seu trem de brinquedo:
Portanto, temos que podem ser divididos em ou
Desafio tão simples: dado um número não negativo como entrada, retorne valores de verdade e falsey consistentes que representam se a representação em cadeia do número (na base 10 e sem zeros à esquerda) pode ou não ser dividida em números com potências de 2 .
Exemplos:
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
Este é o código-golfe ; portanto, pode ganhar o código mais curto para cada idioma!
101
(falso por causa do 0) ... ou isso ainda deve ser verdade ( 1 - 01
)?
101
caso com as respostas atuais e todas elas retornam true
, porque pode ser dividido em 1-01
duas potências de 2, então considerarei esse caso verdadeiro.
log2(n)
não contém dígitos decimais após a vírgula. 2) Verifique se n AND (n-1) == 0
. 3) Crie uma lista de quadrados-nrs e verifique se n
está nessa lista.
int
tipo padrão (4 bytes), mas na verdade não me importo se o seu código não suportar números muito grandes. Apenas indique na sua resposta as limitações do seu código.