1.题目:
水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。如: 1^3+5^3+3^3=153, 8^4+2^4+0^4+8^4 = 8208.
求100~9999之间所有的水仙花数
2.源码:
[n for n in xrange(100, 10000) if (lambda sn: sum(int(x) ** len(sn) for x in sn) == n)(str(n))]
3.思路:拆开 -> 乘方 -> 加和 -> 比较.
点击查看更多内容
17人点赞
3 评论
共同学习,写下你的评论
欲影
老师,最后的str(n)是把n的数字拆成字符串传给sn了么?这一步太快了,没明白过来~~
Brook_StudyMachine
看完题目,首先自己不看答案直接想解决办法,如下:
#coding=utf-8 def func(num): #不知道怎么拆开多位数字,用str() s_num=str(num) res=0 for i in xrange(len(s_num)): res+=int(s_num[i])**len(s_num) return num == res l=[] for x in xrange(100,10000): if func(x): l.append(x) print l [153, 370, 371, 407, 1634, 8208, 9474]
然后再看答案,惊喜的发现,老师也是用str()来拆数字的。
还有,字符串可以直接迭代
自己再默写一遍
l=[n for n in xrange(100,10000) if (lambda sn:sum(int(s)**len(sn) for s in sn)==int(sn))(str(n))] print l [153, 370, 371, 407, 1634, 8208, 9474]
对lambda的理解加深了
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
n for n in xrange(100, 10000)这个两个n分别代表什么呢?