Wczoraj podczas zabawy z moim dzieckiem zauważyłem numer w jego pociągu z zabawkami:
Mamy więc które można podzielić na lub
Tak proste wyzwanie: biorąc pod uwagę nieujemną liczbę jako dane wejściowe, zwracaj spójne wartości truey i falsey, które reprezentują, czy ciąg znaków reprezentujący liczbę (w podstawie 10 i bez zer wiodących) może być w jakiś sposób podzielony na liczby o sile 2 .
Przykłady:
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
To jest kod-golf , więc może wygrać najkrótszy kod dla każdego języka!
101
(fałsz z powodu 0) ... czy to powinno być prawdą ( 1 - 01
)?
101
sprawę z obecnymi odpowiedziami i wszystkie one powracają true
, ponieważ można je podzielić na 1-01
dwie potęgi 2, więc uznam tę sprawę za prawdziwą.
log2(n)
po przecinku nie zawiera cyfr dziesiętnych. 2) Sprawdź, czy n AND (n-1) == 0
. 3) Utwórz listę kwadratowych numerów i sprawdź, czy n
jest na tej liście.
int
typu (4 bajty), ale tak naprawdę nie mam nic przeciwko, jeśli twój kod nie obsługuje bardzo dużych liczb. Podaj w swojej odpowiedzi ograniczenia swojego kodu.