使用Python求解水仙花问题

题目:输出所有的水仙花数。所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个水仙花数,因为153 = 1立方 + 5立方 + 3立方。

解决方法:

方法一:使用列表推导式

1 data=[i for i in range(100,1000)if pow(i//100,3)+pow(i//10%10,3)+pow(i%10,3)==i]

这个方法是比较简单,但是数字只限于100-999,如果超出了这个范围又要在除1000,所以在方法二中我决定使用分解的方法,将一个数字分解成个位、十位、百位、千位、万位等,这样便可以一直求到很大的数字,而且代码还比较简洁。

方法二:使用函数和循环

 1 def d():
 2     def f(n):
 3         c=list(n[::])
 4         return c
 5     for i in range(100,100000):
 6         d=f(str(i))
 7         s=0
 8         for j in d:
 9             s+=pow(int(j),3)
10         if(s==int(i)):
11             print("%d"%s)
12 d()

程序运行结果:

153
370
371
407

注解:做完题目才发现原来水仙花数只有这4个,可是解决问题的时候我们事先是不知道的,所以我个人还是比较推荐大家选择方法二。

posted @ 2013-04-23 11:40  倾杯天涯  阅读(607)  评论(0编辑  收藏  举报