昨天和孩子一起玩时,我注意到他的玩具火车上的数字:
所以我们有可分为或
如此简单的挑战:给定一个非负数作为输入,返回一致的真值和假值,这些值表示该数字的字符串表示形式(以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而虚假)...还是应该为true(1 - 01
)?
101
用当前答案测试该案例,它们都返回true
,因为可以将其分解1-01
为都是2的幂,因此我认为该案例是真实的。
log2(n)
逗号后是否不包含小数位。2)检查是否n AND (n-1) == 0
。3)创建一个square-nrs列表,并检查是否n
在该列表中。
int
类型(4个字节)的范围,但实际上我不介意您的代码是否不支持非常大的数字。只需在答案中说明代码的局限性即可。