- ベストアンサー
犯人探し
こんにちは、いつもお世話になっています。 今、2の階乗の数値があるとします。 --------------------------------- 2^0 = 1 2^1 = 2 2^2 = 4 2^3 = 8 2^4 = 16 2^5 = 32 2^6 = 64 2^7 = 128 2^8 = 256 ------------------------- たとえば犯人82がいて、 これはどの合計か知りたいと考えております。 答えは[2^1]と[2^4]と[2^6]の合計なので、 [1, 4, 6]となります。 これをプログラムで書きたいのですが どのようにすればいいでしょうか? $answer = *****(関数名)(82); ※$answerは配列型です。 宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 簡単な回答ですが。。 大きい数字で引けるものを引いていって、対応する数字を配列で渡せばいいんじゃないですか?
その他の回答 (1)
noname#18290
回答No.2
bit演算子を理解すると簡単です。 function bit_check($n) { $i = 0; $retval = array(); while($n > 0) { if ($n & 1) { $retval[] = $i; } ++$i; $n = $n >> 1; } return $retval; } print_r(bit_check(82));
お礼
はっ!! 気づきませんでした・・・ ありがとうございました!!