2016-09-14 2 views
0

Here is the problem:驚くべきことに、それらの桁の第四の電力の 和として書くことができる唯一の3つの数字がありPythonのプロジェクトオイラー桁第パワー

1634 = 1^4 + 6^4 + 3^4 + 4^4
8208 = 8^4 + 2^4 + 0^4 + 8^4
9474 = 9^4 + 4^4 + 7^4 + 4^4

1 = 1^4は合計ではないため、含まれません。

これらの数字の合計が+ 8208 + 9474 = 19316.

その桁の 第五大国の和として記述することができ、すべての数字の合計を検索し1634です。

そしてここでは私のコードです:

summ = 0 
digit_sum = 0 
i = 0 
while i < 1000000: 
    j = list(str(i)) 
    for x in j: 
     digit = int(x) ** 5 
     digit_sum += digit 
    if digit_sum == i: 
     summ += i 
     print(i) 
    else: 
     digit_sum = 0 
    i += 1 
print(summ) 

誰が、なぜ、私は正しい答えの一つであるべき値4151を欠場することを見つけることができますか?

+0

デバッガを使用するか、コードに 'print'文を追加して、何をしているのか把握することをお勧めします。ループが4151に達したときにのみ 'if'文を出力することができます。 –

答えて

0

あなたのコードの問題は、回答を得たときにdigit_sumをリセットするのを忘れたことです。 j = list(str(i))より前にdigit_sum = 0を入力してください。また、i = 0で始まります。

[i for i in range(10, 1000000) if i == sum(int(d) ** 5 for d in str(i))] 

同等と::

和を用い
[4150, 4151, 54748, 92727, 93084, 194979] 

sum(i for i in range(10, 1000000) if i == sum(int(d) ** 5 for d in str(i))) 

同等の最初の2桁の数は10

使用このですので、私はi = 10を開始することをお勧めwith:

443839 
+0

1は含まれません。 'range(2、100000)'にする必要があります。正解は443839です。 – gobrewers14

+0

多分一桁の数字が受け入れられない場合、 'range(10、1000000)'。 –

+0

範囲の上限は '9" * 5) 'の' d( 'int(d)** 5 ')、' 295245' –

1

4150もまた溶液中にある。 digit_sumは4151ステップ前に0に設定されていません。各ステップでdigit_sum = 0を設定する必要があります。

summ = 0 
digit_sum = 0 
i = 0 
while i < 1000000: 
    digit_sum = 0 # should be set in each step 
    j = list(str(i)) 
    for x in j: 
     digit = int(x) ** 5 
     digit_sum += digit 
    if digit_sum == i: 
     summ += i 
     print(i) 
    i += 1 
print(summ) 
-1

あなたの質問への答えは、あなたがdigit_sumを毎回リセットしないという場合にのみ、digit_sum != iです。 elseステートメントを削除すると正しく動作するはずです。

if digit_sum == i: 
    summ += i 
    print(i) 
digit_sum = 0 
i += 1 
関連する問題