デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4375  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

0から1000までの0の数を数える

昨日のエントリはちょっとだけ祭りっぽくなったみたい。

# でも炎上とまではいかない。やはり炎上させるには「残念な0~1000」とか「0~1000まで数えるお作法(常識)」みたいなエントリにすべきだった。

今日は、昨日の拡張で、今度は0~1000までの数に含まれる0~9それぞれを数えてみる。

int n,c,i,j;main(){for(;j<10;printf("%d:%d\n",j,c),j++)for(c=i=n=0;i<1001;n=++i)while(c+=(n%10==j),n/=10);}

まだ140字以内。

出力結果

0:193
1:301
2:300
3:300
4:300
5:300
6:300
7:300
8:300
9:300

まだ140字以内。

出力結果

16進数だとこんな感じ

int n,c,i,j;main(){for(;j<16;printf("%x:%d\n",j,c),j++)for(c=i=n=0;i<0x1001;n=++i)while(c+=(n%16==j),n/=16);}

出力結果

0:499
1:769
2:768
3:768
4:768
5:768
6:768
7:768
8:768
9:768
a:768
b:768
c:768
d:768
e:768
f:768
※自分で数えて確認してないから間違っているかもしれません。
昨日のエントリにコメントをいただいて、プログラムも見てみたのですが、やはり数値を文字列化して、その中の”0”の数を数える方法が多いですね。
その方法も1つの値ごとに文字列化して数える方法と、全数値の文字列を連結してから0を数える方法がありました。後者の方が簡潔になるでしょう。
僕が使っている方法は
  1. 値の10の余りを計算し、その余りがカウントする数値と一致していたらインクリメント
  2. 値を10で割る
  3. 値が0でなければ1へ、0になったら終了

これを0~1000までに対して行っています。
while(c+=(n%10==j),n/=10);
この部分のnが値、cがカウンタです。

投稿日時 : 2010年7月23日 1:58

コメント

No comments posted yet.

Post Feedback

タイトル
名前
Url:
コメント: