Ayer, mientras jugaba con mi hijo, noté el número en su tren de juguete:
Entonces tenemos que se pueden dividir en o 2 ^ 2-2 ^ 1-2 ^ 3-2 ^ 0
Desafío tan simple: dado un número no negativo como entrada, devuelve valores de verdad y falsey consistentes que representan si la representación de cadena del número (en base 10 y sin ceros a la izquierda) se puede dividir de alguna manera en números que son potencias de 2 .
Ejemplos:
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 es el código de golf , ¡así que puede ganar el código más corto para cada idioma!
101
(falso debido al 0) ... ¿o debería ser cierto ( 1 - 01
)?
101
caso con las respuestas actuales y todas regresan true
, porque se puede dividir en 1-01
ambas potencias de 2, por lo que consideraré que el caso es verdadero.
log2(n)
no contiene dígitos decimales después de la coma. 2) Verifique si n AND (n-1) == 0
. 3) Cree una lista de cuadrados y verifique si n
está en esa lista.
int
tipo estándar (4 bytes), pero en realidad no me importa si su código no admite números muy grandes. Simplemente indique en su respuesta las limitaciones de su código.