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 = 0
for i in range(0,length):
sum = sum + int(str1[i])**length
if sum == n:
return True
else:
return False
4、算法改进
接受一个参数max (max>=1000),调用上面的判断函数,求100~max之间的水仙花数。
5、Python代码汇总:
def shuixianhua_num(n):
str1 = str(n)
length = len(str1)
sum = 0
for i in range(0,length):
sum = sum + int(str1[i])**length
if sum == n:
return True
else:
return False
def 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]