paizaオンラインハッカソン vol.7 「プログラミングで彼女をつくる」というプログラミングで遊ぶイベントがありました。
paiza.jp
そこの水着ゲットチャレンジで正解した自分のコードを載せます。試行錯誤の末辿り着いたものなので、自分でもわからない部分がありますが…
問題はこちらです。
N が与えられたとき、N! のすべての桁の代わりに、N! の最下位桁から続く0 をすべて除いた値の下位9桁を求めるプログラムを作成してください。
9桁ではあるが先頭が0であるような場合は先頭の0を取り除いた値を出力してください。先頭に0のついた値を出力すると誤答となります。
自分の解答方針は次の通りです。
- 掛ける前に掛ける数を10で割れるとこまで割る
- 掛けた結果も10で割れるとこまで割る
- 上記2つを行った後、下位の桁だけ残す
これを基にして作ったコードが以下のようになります。言語はRubyです。コメントの部分は、自分でもよくわかっていない部分です。
n = gets.to_i kaijo = 1 # 1.upto(n)ではダメ n.downto(1) do |i| i2 = i while i2%10 == 0 i2 /= 10 end kaijo *= i2 while kaijo%10 == 0 kaijo /= 10 end # 10**9 ではダメ kaijo %= 10**10 end kaijo %= 10**9 puts kaijo