出典: Project Euler (日本語翻訳サイト)
参考: サイエンスもの置き場 プロジェクトオイラーを遊び倒すガイド(初級編)
Problem 16
215 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。
同様にして、21000 の各数字の合計を求めよ。
私の解答例は以下です。
-----
def f(n): return sum([int(i) for i in str(2**n)]) print f(1000)-----
1.関数f(n)
2のn乗の各桁の和を返します。
・2**n
「**」演算子は累乗です。ここでは2のn乗のことです。
107・・・376という302桁に数字になります。
pythonでは値の桁数制限がないのでこの表記で2の1000乗でも大丈夫です。
・str関数で文字列化します。
”107・・・376”という302文字の文字列です。
・[]を用いて、内装表示で、各桁1ずつのリストから要素1つずつを取り出して、int関数で数値に変換したリストになります。
[1, 0, 7,・・・, 3, 7, 6]というリストになります。
・sum関数で上記リストの和を求めます。
解答はこのすぐ下の行です。文字の色を白にしてます。選択状態にすると見えます。
1366
(追記)
・20120715
list(str(2**n)) -> str(2**n) に修正。
stringオブジェクトはlistオブジェクトと同じシーケンス(sequence)という種類のオブジェクトで、ループで回すことができるため。
・20120715
ソースコード部分にSyntaxHighlighterを導入。
0 件のコメント:
コメントを投稿