判断是否为水仙花数(Python)

1、题目:
应用Python创建一个函数,接受一个参数n (n>=100) ,判断这个数是否为水仙花数。

水仙花数:满足如果这个数为m位数,则每个位上数字的m次幂之和等于它本身
例如:1^3 + 5^3 + 3^3 = 153
(该题目来自北大陈斌老师的MOOC)

2、分析过程

  1. 由于输入的数字位数不确定,有可能3位,也有可能4位,甚至更多,刚开始我是想通过个位、十位等等来进行判断,但是没找到合适的方法来进行遍历。(有好方法可以交流交流)
  2. 在判断该数字的位数时,采用转化成字符串的形式,来进行位数的判断,从而具有普适性。

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]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值