昨日、子供と遊んでいる間に、彼のおもちゃの列車の番号に気付きました。
持っている私たちは、だから、
とても簡単な挑戦:入力として負でない数が与えられると、数の文字列表現(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
これはcode-golfなので、各言語の最短コードが勝つかもしれません!
101
(0のせいで偽)...または、これはまだ正しい(1 - 01
)でしょうか?
101
現在の回答でケースをテストしており、それらはすべて2のべき乗であるためtrue
分割できるため1-01
、そのケースは真実であると考えます。
log2(n)
カンマの後に10進数が含まれていないかどうかを確認します。2)かどうかを確認しますn AND (n-1) == 0
。3)平方nrsのリストを作成し、n
そのリストにあるかどうかを確認します。
int
型(4バイト)の範囲に制限することを考えましたが、実際には、コードが非常に大きな数をサポートしていないかどうかは気にしません。コードの制限を答えに明記してください。