Hatena::Grouprubyist

altrのruby日記

2008-11-12

ゼロの数を数える

| 13:24

#!ruby
cnt = 0
for i in 1..1000
  until i / 10 == 0
    cnt += 1 if ((i % 10) == 0)
    i = i / 10
  end
end
print cnt

コメント欄で紹介されてる、injectを使う方法。injectって何だっけ…

(0..1000).inject(0){|c,i|c+i.to_s.count('0')}

cにブロック内の結果を入れていく。(0)は初期値。

krystalkrystal 2008/11/12 16:31 私はここの解説を参考にしました。
http://www.ruby-lang.org/ja/man/html/Enumerable.html#inject

altraltr 2008/11/12 17:07 どもです。
って、ありゃ、0から1000だったら、上の例は失敗しますね(順番に10で割ってるけど、0のときはカウントされない)…。すいません。
「1の出現数」「2の出現数」みたいな応用もきかないし、素直に文字列として処理(injectの例みたいに)したほうがいいと思います。
print (0..1000).map{|i|i.to_s}.join.count('0');
とかでも。

ゲスト



トラックバック - http://rubyist.g.hatena.ne.jp/altr/20081112