Вчора під час гри з дитиною я помітив номер у його іграшковому поїзді:
Отже, у нас є
Настільки простий виклик: задавши невід'ємне число як вхідне значення, поверніть послідовні значення truthy та falsey, які представляють, чи може бути рядкове представлення числа (у базі 10 та без провідних нулів) можна якось розділити на числа, що мають потужність 2 .
Приклади:
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
Це код-гольф , тому може виграти найкоротший код для кожної мови!
101
(хибність через 0) ... чи це все-таки має бути правдою ( 1 - 01
)?
101
справу з поточними відповідями, і всі вони повертаються true
, тому що це може бути розділено на 1-01
обидві сили 2, тому я вважаю цей випадок правдивим.
log2(n)
не містить десяткових цифр після коми. 2) Перевірте, чи є n AND (n-1) == 0
. 3) Створіть список квадратних ліній і перевірте, чи n
є в цьому списку.
int
типу (4 байти), але насправді я не проти, якщо ваш код не підтримує дуже великі числа. Просто вкажіть у відповіді обмеження вашого коду.