2016-09-14 16 views
0

Here is the problemPython項目歐拉數字第五權力

令人驚訝的只有三個可寫爲 總和其位數第四功率的數字:

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不是一個總和,所以不包括在內。

這些數字的總和是1634 + 8208 + 9474 = 19316.

查找所有可以寫爲他們的數字 第五功率之和的數字的總和。

這裏是我的代碼:

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'語句來弄清楚它在做什麼。您可以添加一個'if'語句以僅在循環達到4151時打印。不包括 –

回答

0

您的代碼中的問題是您忘記了當您得到答案時重置digit_sum。 在j = list(str(i))之前放digit_sum = 0。你也從i = 0開始。我建議開始與i = 10由於第一2位數是10。

使用這樣的:

[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))) 

等效與:

443839 
+0

。應該是'range(2,100000)'。正確的答案是443839.如果沒有單個數字號碼被接受, – gobrewers14

+0

也許是'range(10,1000000)'。 –

+0

範圍的上限只需要是sum(int(d)** 5 for d in「9」* 5)',或'295245' –

1

4150也在解決方案中。在4151步之前digit_sum未設置爲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