1、题目:
应用Python创建一个函数,接受一个参数n (n>=100) ,判断这个数是否为水仙花数。
水仙花数:满足如果这个数为m位数,则每个位上数字的m次幂之和等于它本身
例如:1^3 + 5^3 + 3^3 = 153
(该题目来自北大陈斌老师的MOOC)
2、分析过程
- 由于输入的数字位数不确定,有可能3位,也有可能4位,甚至更多,刚开始我是想通过个位、十位等等来进行判断,但是没找到合适的方法来进行遍历。(有好方法可以交流交流)
- 在判断该数字的位数时,采用转化成字符串的形式,来进行位数的判断,从而具有普适性。
3、Python代码:
def shuixianhua_num(n):str1 = str(n)#将输入的数字转化为字符串length = len(str1)sum = 0for i in range(0,length):sum = sum + int(str1[i])**lengthif sum == n:return Trueelse:return False
4、算法改进
接受一个参数max (max>=1000),调用上面的判断函数,求100~max之间的水仙花数。
5、Python代码汇总:
def shuixianhua_num(n):str1 = str(n)length = len(str1)sum = 0for i in range(0,length):sum = sum + int(str1[i])**lengthif sum == n:return Trueelse:return Falsedef shuixianhua_max(m):list = []for i in range(100,m+1):t = shuixianhua_num(i)if t == True:list.append(i)print(list)
6、结果展示
输入:
shuixianhua_max(1000)
输出:
[153, 370, 371, 407]