問題
n がある非負整数 k ≥ 0 に対して 2ᵏ と等しいかどうか(1, 2, 4, 8, …)を判定してください。
is_power_of_two(n) を実装してください。
入力
n: 判定する数値。
出力
n が2のべき乗であれば true を返してください。
制約
-10¹⁸ ≤ n ≤ 10¹⁸
例
例 1
入力:
n = 64
期待される出力:
expected = True
入力:
long long n = 64;
期待される出力:
bool expected = true;
入力:
long n = 64;
期待される出力:
bool expected = true;
解説
64 = 2⁶ です。
例 2
入力:
n = 12
期待される出力:
expected = False
入力:
long long n = 12;
期待される出力:
bool expected = false;
入力:
long n = 12;
期待される出力:
bool expected = false;
解説
12 = 4 × 3 で奇数の因数を持つため、2のべき乗ではありません。
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
2のべき乗は、2進数でちょうど1ビットだけが立っています。
ヒント 2
ビットを使った判定の前に、数が正であることを確認します。
ヒント 3
負の数と0は、どちらも2のべき乗ではありません。
目安の計算量
時間 O(1)、追加メモリ O(1)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。