paizaオンラインハッカソン7 水着問題

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の9日目のエントリです.

問題はこちら

最近,中の人 (に近い人?) と知りあったこともあって,paizaに登録した.
そのタイミングでイベントが始まったので,とりあえず全問解いた.
最後の問題はなかなか難しく,Twitter見る感じ解説需要ありそうだなーと思い,以下のようにpaiza的にも解説OKらしいので今日はこの問題を選択した.

問題概要

  • 整数[latex]n[\latex]が入力される
  • nの階乗の末尾の0を取り除く
  • 上記から末尾9桁を取り出す
  • 取り出した9桁から先頭の連続した0を取り除く

解法

  • ループで階乗を計算する
  • 末尾の0は随時取り除いて良い
    while(10で割り切れる) 10で割る
  • あまり大きい桁の情報はいらない
    随時,適当に大きい数で割って余りを取る
  • 計算結果をstringに変換して末尾9文字を取り出す
  • 取り出したものをintに変換する (先頭の0が取り除かれる)

コードを見たほうがはやそう.

余談

楽して年収2000万円くらいもらえる職場を募集しています.
1年くらい辛くて年俸6億円くらいの職場でもいいです.