blog技術的なことを主にこの広告は、90日以上更新していないブログに表示しています。paizaPOH8の問題を全部解いてしまったので、昔のにも挑戦してみます。自然数であるとき、階乗は次のように計算できます。すべて除いた値の下位9桁を求めるプログラムを作成してください。9桁ではあるが先頭が0であるような場合は先頭の0を取り除いた値を出力してください。先頭に0のついた値を出力すると誤答となります。時は以下のようになります。条件すべてのテストケースにおいて、以下の条件をみたします。1000000入力例1入力15出力307674368入力例2入力10出力36288ちょっと見、ただ単に階乗を求めて、ちょこちょこっと条件に合うように変更するだけにみえますが、実はトラップが何個も仕掛けてありました。2つの入力例だけの場合は、上記の通り何も考えずにトラップに引っかからずに通ってしまいます。トラップ1整数型では単に階乗を求めてしまうとかなり早い段階でオーバーフローを起こしてしまいます。LL言語で動的型で解こうとしても、JavaScriptなどは内部で浮動小数点型に変換されてしまうため、正確な値がでなくなります。トラップ2入力範囲が1000000まで。そのため、何も考えずに再帰で書いてしまうとほぼスタックオーバーフローになります。トラップ3トラップ1にかからないように、巨大な値になる前に、常に下の0を削除して9桁で計算してしまおう。思っていると引っかかります。5の倍数をかけると実質割り算になるので、途中が9桁しかないと答えが合いません。以上を踏まえて、scalaで解いてみました。Art久しぶりに、codingameをやってみました。#11に行ってきました。人気ブログランキング人気ブログランキングへはてなブログをはじめよう!kei0425tanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。