出典:Project Euler(日本語翻訳サイト)
参考:サイエンスもの置き場 プロジェクトオイラーを遊び倒すガイド(初級編)
Problem 20
n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。
100! の各桁の数字の合計を求めよ。
私の解答例は以下です。
-----
def f(i): if i<=1: return 1 else: return i*f(i-1) print sum([int(i) for i in str(f(100))])-----
・f()
階乗の関数を再帰呼び出しで書いてみました。
停止条件がi=1であり、f(1)になるまで、引数iに1つ前の階乗値f(i-1)をかけます。
1つ前の階乗値を求めるなかで、さらに1つ前の階乗値を使用するため自分自身を呼び出します。
・sum([int(i) for i in str(f(100))])
階乗値f(100)をstr関数で文字型に変換します。
文字型はpythonではシーケンス(sequence)という、forループで回せるオブジェクトです。
文字列をforループで回すと、ループ変数に文字列の1文字ずつが設定されます。
こうしてループ変数iに階乗値の1桁ずつが文字型で設定されてfor文の前に渡され、int関数で整数型にした状態で配列の要素として保持します。
こうして、100の階乗値の1桁ずつの数値を設定した配列ができあがり、これをsum関数で合計します。
解答はこのすぐ下の行です。文字の色を白にしてます。選択状態にすると見えます。
648
(追記)
・20120708
関数fの停止条件がn==1では無限ループになるのでn<=1に修正。
・20120715
ソースコード部分にSyntaxHighlighterを導入。
0 件のコメント:
コメントを投稿