|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 changhaitian 于 2017-1-6 05:23 编辑
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3 (请问这里是如何体现出 100a+10b+c = a**3+b**3+c**3)
temp //= 10
if sum == i:
print(i)
(水仙花数就是一个三位数等于其各位数字的立方和,如 153 = 1**3+5**3+3**3,题目是打印1000内的水仙花数)
我不知道理解的对不对:
因为 sum = 0,所以,每次sum = sum + (temp%10)**3 也就是相当于a**3,b**3,c**3
然后需要重新把他们带入公式,所以就相当于 sum = a**3 + b**3 + c**3???
当我把365带入进去的时候,sum = sum + (temp%10)**3 和temp//10里面temp的值是一样的么?
时隔这么久,我还是没完全弄懂。
本帖最后由 Kotori 于 2016-10-13 07:54 编辑
一个十进制数可能通过除以10取余数依次得到各个数位上的数。
sum = sum + (temp%10) ** 3 这一句是求这个数各个数位的三次方的和。到最后才判断这个和是否和原数i相同。
temp则是作为一个变量,每次提供最后一位数字。
举个例子,temp是153进入循环, (temp%10) ** 3 得到个位数3的三次方,同时进行对SUM的累加。
然后temp //= 10 地板除就相当于把这个数的最后一位去掉,得到15。
后面再进行循环就能依次取到5和1两个数。
|
|