水仙花数的意思是说一个三位数的百位、十位、个位各自求立方后再求和等于这个三位数:153=1^3+5^3+3^3。现在问题来了:请写出一段Python程序求出100-999之间的所有水仙花数。
整合了一下网上的答案并结合自己的思考和实践,方法大致有三:
1.将百位、十位、个位的数字分别设置为变量:
for i in range(1,10):
for j in range(0,10):
for k in range(0,10):
if i*100+j*10+k==i**3+j**3+k**3:
print (i*100+j*10+k,'是水仙花数')
这个办法感觉比较low,但是能实现,哈
2.反过来,将三位数本身设置为变量,运用地板除法和求余数法得出百位、十位和个位数字:
for flower in range(100,1000):
a = flower//100 #百位数字是flower除以100,然后向下取整
b = flower//10%10 #十位数字是flower除以10,向下取整然后再除以10取余
c = flower%10 #个位数字是flower除以10再取余
if flower == a**3+b**3+c**3:
print(flower)
说实话,小学老师真没教过地板除法和求余法,关键是一学到余数就开始学小数点和分数了啊,没人告诉我余数居然这么有用,哭/(ㄒoㄒ)/~~
3.第三种方法对我这种菜鸟来说有点难理解,就是第二种方法的升级版(加入了循环):
for i in range(100,1000):
sum=0
temp=i
while temp:
sum=sum+(temp%10)**3 #这个循环比较难理解,根本上还是取余和地板除
temp//=10
if sum == i:
print(i)
反正我目前就以第二种方法为重吧。。
菜鸟继续学习中。。