令人惊讶的是,只有三个数字可以写成 各位数的四次幂之和:
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 :(得分:2)
代码中的问题是,当您得到答案时,忘记重置digit_sum
。
将digit_sum = 0
放在j = list(str(i))
之前。您也可以从i = 0
开始。我建议从i = 10
开始,因为前两位数字是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:
sum(i for i in range(10, 1000000) if i == sum(int(d) ** 5 for d in str(i)))
相当于:
443839
答案 1 :(得分:1)
summ = 0
i = 10
while i < 1000000:
digit_sum = 0
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)
答案 2 :(得分:-1)
您的问题的答案是,您每次都不会重置digit_sum
,仅在digit_sum != i
时。如果删除else
语句,它应该可以正常工作。
if digit_sum == i:
summ += i
print(i)
digit_sum = 0
i += 1