(特別)例外処理~階乗編~

2 secs 1024 MB
Aozora_Kotori_A's icon Aozora_Kotori_A

問題「階乗」をC言語の int 型の変数で処理すると,13!=622702080013!=6227020800 を出力しようとしてオーバーフローし,正しい値が出力されない。また,負の整数の階乗はそもそも定義されていない。

では,次のようにこれらの例外を処理しよう。

  • 与えられた整数が 11 以上 1212 以下なら,そのまま階乗を求める。
  • そうでなければ,もう一度入力を求める。

これを踏まえて,問題に取り組んでみよう。

問題文

与えられた整数列 a1, a2, a3, a4, a5a_1,\ a_2,\ a_3,\ a_4,\ a_5 に対して,1ai121\leqq a_i \leqq 12 を満たす最小の ii を求め,aia_i の階乗 ai!a_i! の値を出力せよ。

(分かりにくいと思うので,サンプルを見ることを推奨します。)

制約

  • 入力はすべて整数
  • 15ai15(i=1, 2,, 5)-15\leqq a_i\leqq 15\quad(i=1,\ 2,\ldots,\ 5)
  • a1, a2,, a5a_1,\ a_2,\ldots,\ a_5 のうち少なくとも1つは 11 以上 1212 以下である

 

入力

入力は以下の形式で標準入力から与えられます。

標準入力

a1 a2  a5a_1\ a_2\ \cdots\ a_5

出力

答えの値 AA を以下の形式で出力してください。

標準出力

AA

 

サンプル1

入力
10 5 4 11 8
出力
3628800

a1=10a_1=101a1121\leqq a_1\leqq 12 を満たしているので,a1!a_1! を出力します。

  

サンプル2

入力
-10 5 14 9 7
出力
120

a1=10a_1=-10 は条件を満たしていません。次の a2=5a_2 = 5 は条件を満たしているので,a2!a_2! を出力します。

 

サンプル3

入力
-10 14 -2 8 15
出力
40320

a1=10a_1=-10 は条件を満たしていません。同様に a2, a3a_2,\ a_3 も条件を満たしていません。その次の a4=8a_4 = 8は条件を満たしているので,a4!a_4! を出力します。

Submit


Go (1.21)