2進数の1の数を数える問題
次の問題に対して、以下のソースを考案し、実行したところ、以下のようになりました。
【問】
◆◆◆◆◆
与えられた10進数の整数Nを2進数に変換したときの1の個数を答えよ。
整数の10進数を2進数に変換するには、変換したい10進数を商が0になるまで2で割り続け、求めた余りの部分を逆順に並べる。
例)
13が入力として与えられた場合、以下のように2で割り続け2進数を求める。
13 / 2 = 6 ・・・余り 1
6 / 2 = 3 ・・・余り 0
3 / 2 = 1 ・・・余り 1
1 / 2 = 0 ・・・余り 1
求められたそれぞれの余りを逆順に並べたものが2進数への変換結果となる。
よって入力が13ならば2進数への変換結果は
1101
になり、1は3個あるので出力は3になる。
[入力例1]
13
[出力例1]
3
[入力例2]
45
[出力例2]
4
◆◆◆◆◆
(自分の解答、□はタブ)
◆◆◆◆◆
#include <stdio.h>
#include <stdlib.h> /* EXIT_SUCCESS */
int main(void)
{
□int n, bit, s;
□scanf("%d", &n);
□
□bit = n % 2;
□n /= 2;
□s = 0;
□while(n) {
□□if (bit)
□□□s++;
□bit = n % 2;
□n /= 2;
□}
□printf("%d", s);
□return EXIT_SUCCESS;
}
◆◆◆◆◆
(実行結果1)
◆◆◆◆◆
[入力]
13
[出力]
2
◆◆◆◆◆
(実行結果2)
◆◆◆◆◆
[入力]
45
[出力]
3
◆◆◆◆◆
となり、正解となりません。
自分の考えとしては、入力された数値を変数nに収め、これをどんどん2で割っていき、そのときの余り(0か1)を変数bitに収めていき、nが0になるまで処理を繰り返し、bitが0でないとき、変数s(初期値0)に1ずつ加算していき、最後にsを出力する、という方針です。
初期値の設定辺りが間違っているのだと思いますが、これ以上いくら考えても正解が得られません。どこがどう間違っているのでしょうか。どなたかご教授頂きたく、お願い致します。
お礼
再度の書き込みありがたいです。 実は映像としてアップしているものが単純なモデルとして作りなおしたもので、更にもっと単純化したもので作り直しをしたのが前回でした。ポリゴンに変換する前からパーティクル自体は消滅していなくムービーの最後まで存在しています。また角度を変えていろいろ確認もしてみましたが原因などは見つけることができませんでした。 かなりの時間を費やしてもう嫌になって投げ出した状態になっています。とりあえずパーティクルからは少しやめて、しばらく経って何かヒントが見つかったらまた挑戦してみるつもりです。 ありがとうございました。