2016-09-14 3 views
0

Here is the problem : 놀랍게도 그 자리 제 힘의 합으로 작성 될 수있는 세 개의 숫자가있는파이썬 오일러 프로젝트 자리 제 힘

:

1,634 = 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으로 시작하십시오. 상기 제 2 자리 숫자 10

사용하므로 I는 i = 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

1은 포함되지 않습니다. 'range (2, 100000) '여야합니다. 정답은 443839입니다. – gobrewers14

+0

한 자리 숫자가 허용되지 않는 경우 'range (10, 1000000)'일 수 있습니다. –

+0

범위의 상한선은 '9 "* 5)'또는 295245'에서 d에 대해서만 sum (int (d) ** 5) –

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