Вчера, играя с моим ребенком, я заметил номер в его игрушечном поезде:
Таким образом, у нас есть которые можно разделить на или
Очень простая задача: если в качестве входных данных ввести неотрицательное число, верните непротиворечивые значения истинности и фальси, которые показывают, можно ли каким-то образом разбить строковое представление числа (в базе 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
две степени, так что я буду считать, что этот случай правдив.
log2(n)
, не содержит ли десятичные цифры после запятой. 2) Проверьте, если n AND (n-1) == 0
. 3) Создайте список квадратов и проверьте, есть ли n
в этом списке.
int
типа (4 байта), но на самом деле я не против, если ваш код не поддерживает очень большие числа. Просто укажите в своем ответе ограничения вашего кода.