• ベストアンサー

犯人探し

こんにちは、いつもお世話になっています。 今、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は配列型です。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fuji1
  • ベストアンサー率29% (109/371)
回答No.1

こんにちは。 簡単な回答ですが。。 大きい数字で引けるものを引いていって、対応する数字を配列で渡せばいいんじゃないですか?

toopeaan
質問者

お礼

はっ!! 気づきませんでした・・・ ありがとうございました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#18290
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));

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラミング関係で

    プログラミングで次の問題をどうすればいいのかわかりません。 教えてください 1.配列に次のデータが格納されており、 2,-8,5,-4,6,5,7,-3,-9,-1 奇数、偶数、負の数がそれぞれいくつあるかを数え、表示するプログラムを作成してください。 2.任意の整数Xを入力し、Xの階乗の結果を表示するプログラムを作成しなさい。ただし、Xの階乗の計算は別関数で行い、入力と結果の表示はmain関数で行うようにすること。

  • 多次元配列の引渡しについて

    メイン関数と 副プログラム(?)間での  三次元配列の数値の引渡しは可能なのでしょうか? 今の私のプログラムだと どうもうまく引き渡されていないようなのです。初心者のため いきづまってしまいました。どなたか分かる方 教えていただけると助かります。

  • インデックス(index)関数を用いて

    ある数値配列をもったファイルがあります。(100個ほど数値があるとしてください)その中から、自分でプログラムを作る際に指定した連続した配列(7、8個程度だと考えてくだされば結構です)を探し、それが見つかった場所から配列の最後までを表示するプログラムを作りたいんですが、どのようにしたらいいんでしょうか? インデックスindexだけでは、指定した文字が存在するかしないかの判断はできると思われるんですが。 実行する際には、以下のようにするつもりです。 プログラムファイル名.pl データファイル(数値配列)名.txt 検索する数値列(ここでは簡単に表示するために1234567)としておきます。 わかりにくくてすいませんが、回答よろしくお願いします。

  • エクセル関数の解読サイトなんてありますか?

    エクセル関数の解読サイトなんてありますか? いつもお世話になっております<(_ _)> エクセルファイルに関数の入った数式が入力されています。 セルごとに複数の関数が入っていますが、私にはちっともわかりません。 そこで質問です。 こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか? たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。 すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。 それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

  • SUMPRODUCT関数の使い方

    いつもお世話になっております。SUMPRODUCT関数の使い方が解らず困っています。 どなたか、教えてください。 I列(3~1034)に101と入力されており、F列(3~1034)に○と入力されているセルの数を数えたくて、 SUMPRODUCT関数を使いましたが、答えが0になるか、NAME?になるかで、正答が表示されません。 関数が苦手なので、SUMPRODUCTは、関数の表示ダイアログボックスを使って作成しています。 すると、配列1、配列2、配列3と出てくるので、 配列1に I3:I1034=101 配列2に F3:F1034=○ (絶対参照して)入力すると =SUMPRODUCT($I$3:$I$1034=101,$F$3:$F$1034=○) となり、答えは #NAME? と出てしまいます。 また、やり方が解らないのですが、他の質問の回答をみて、SUMPRODUCT関数を手入力し、 =SUMPRODUCT(($I$3:$I$1034=101)*($F$3:$F$1034=○)) と修正入力すると、答えは 0 になってしまいます。 (だいたい、どうして * が出てくるのかも理屈が解りません。) 101や○を””でくくっても、うまくいきません。 もはや何がどう良くないのかわかりません(泣) どなたか、素人の私にも解るようにご解説お願いいたします。

  • C言語から質問です。

    C言語から質問です。 /* main関数の中で初期化した配列 data[10]={60,30,70,25,20,9,92,55,20,10}; を関数 keisan() に引数として渡して、関数keisan()内で 平均値、最大値,最小値 を求め、その結果をmain関数に戻し、main関数内で 平均値、最大値,最小値を表示させるプログラムを作成せよ。 int keisan(const int data[], int data_kosuu, double answer[]) { return 0; } とする。 (注) プロトタイプ宣言を用いよ。 ヒント:平均値,最大値,最小値の3つの値を main関数に戻すやり方として、配列answer[]を使うとよい。 data_kosuu は、配列の要素数を与えるものです。 ヒント: (int型の変数)/(int型の変数)=int型の値です。 int型同士の割り算の答えANSWERをdoubleにしたい場合は、  ANSWER=(double)(int型の変数)/(int型の変数);    と(double) キャストという操作をする必要がある */ #include <stdio.h> int keisan(const int data[], int data_kosuu, double answer[]); int main(void) { int i; int a[10]={60,30,70,25,20,9,92,55,20,10}; // この値を使ってください double ans[3]; keisan(a,10); /* keisan関数に配列と配列要素数を引数で与える */ for(i=0; i<10 ; i++) printf("a[%d]=%d\n",i,a[i]); printf("平均=%lf 最小値=%d 最大値=%d\n",ans[0],ans[1],ans[2]); return 0; } /* 合計・最大値・最小値を求める関数 */ int keisan(const int data[], int data_kosuu, double answer[]) { int i; int sum; int min,max; min=10; /* min の初期化 */ max=10; /* max の初期化 */ sum=0; /* 合計値の初期化 */ for (i=0; i<10 ; i++){ sum = sum+data[i]; if(data[i] > max) max=data[i]; if(data[i] < min) min=data[i]; } sum=sum/10; answer[0]=sum; answer[1]=min; answer[2]=max; } エラー error C2198: 'keisan' : 呼び出しに対する引数が少なすぎます。 とでて先に進めません。 教科書などを見ても間違いがわかりません; 虫食いになってるところを自分なりにやってみたため、 根本的に間違ってるかもしれませんが、 どうかアドバイスや指摘などをお願いします。

  • やってみてくださ

    任意の数値を2つ入力し、合計を返り値として返す関数int re_sum、 返り値を待たないで合計を求める関数void no_re_sumを作成せよ。 if switch for while do-while 配列 をなるべく使う。

  • ある条件を満たした最も近い数値を求める配列数式

    ある条件を満たした最も近い数値を求める配列数式について質問します。 A列には,C列の数値と比較する元になる数値が並んでいます。 B列には,D列の数値と比較する元になる数値が並んでいます。 C列には,A列の数値と比較する対象となる数値が並んでいます。 D列には,B列の数値と比較する対象となる数値が並んでいます。 E列には,計算式が入ります。 すなわち,例えば,E20には, C$1:C20の範囲内の数値で, 右となりにあるD$1:D20の数値が0でなく,かつ,B$1:B20の数値以下である数値の中で, 最もA20の数値に近い数値を求めます。 A  B   C   D  E 1 100  10 89   0   0 2 101 8 90    10    0 3 102 11 92    11   92   4 99 7 77      0   0 5 87 11 68    12   92 6 105   14 100     7   100 7 102 9 78     8   100 8 88 15 102     0    90 9 98 14 99    10    99 10 150 13 78     9   100 11 103  8 79     0   100 12 87 9 68     8   78 13   77   10    70    10   78 14   89   12    71     5   90 15   65   14   102     3   68 16   88   13   105     0   90 17   123  15    98     8   102 18   145  17    99    10   102 19   85    8   100     0   90 20   84    9    87    5    78 一定の条件を満たした配列の合計を計算する関数として,SUMPRODUCT()という便利な関数がありますが, この関数に相当する関数がないので困っています。 MIN関数が配列数式に対応していて,かつ,MIN関数をうまく利用して,最も近い数値を求めることがでるき方法があれば,私の希望が解決できそうなのです。 以上,よろしくアドバイス願います。

  • C言語

    以下の流れにそってプログラムを書いてみましょう。 ある数値を渡されると、その数値の 2 乗を求め、その値を return する関数 func_pow を作る。 main 関数において、1 から 10 までの数値の 2 乗を func_pow 関数を呼び出して求め、それぞれの値とその合計を表示する。 この問題文がいまいち分かりません・・・。解き方を教えていただけたらうれしいです。

  • エクセル関数で質問です

    こんにちは。いつもお世話になっております。 エクセルの関数で質問があります。 毎月の集計表を作っており、シート名が1~31、 ●月合計・●月合計2 とあります。 ●月合計のシートには日付が縦に入っており、 A4 ●月1日 A5 ●月2日・・・というように 続いております。 B4のセルには、 1のシートの数値、 B5のセルには  2のシートの数値・・・というように、 各シートのデータを参照したいと思っていますが、 下へオートフィルで数式をコピーして参照できるように するにはどうしたらいいでしょうか? ROW関数などを使ってみたのですが、どうもうまくいかず 困っています。 一列だけでなく、複数列あるため、手作業で一つ一つ 参照するのは、非常に困難なため、お知恵を拝借できれば幸いです。 よろしくお願いいたします。 

このQ&Aのポイント
  • YouTubeを始めた中1が、3年以内にチャンネル登録者数1万人を目指しています。
  • 現在の動画の試聴回数は合計230回で、手描きの異世界モノのファンタジー紙芝居アニメを作成中です。
  • 投稿頻度は週1から週2ほどで、チャンネル登録者はまだ0人です。頑張って目標達成を目指します!
回答を見る