用户输入位数 n,找出并显示出所有 n 位的自幂数

"""
自幂数是指一个 n 位正整数,如果它的各位数字的 n 次方的和加起来等于这个数,数学家称这样的数为自幂数。例如,13+53+33=153,
153 就是一个 3 位的自幂数,3 位自幂数也称为水仙花数。本程序设 n 的数值为 1~6,当 n 大于 6 时,程序退出。
"""
i = int(input("请输入一个1-6的正整数:"))
l = []
a = 1
b = 9
if 1 <= i <= 6:          #判断输入的数值是几位数
    if i == 1:
        for j in range(10):
            if j == j**i:
                l.append(j)
            else:
                break
    else:
        a = 10**(i-1)
        b = 10**i
        for f in range(a,b):     #分别对响应位数范围内所有的数值进行循环判断
            count = 0
            f = str(f)   #转换成字符供下面安位取值
            for g in range(i):
                count += (int(f[g]))**i      #计算每个数值个位数值的N次方相加的数值
            if int(f) == count:              #判断原始数值与通过位数的次方想法的数值是否相等,相等则满足条件,添加到列表
                l.append(f)
            else:
                continue
    print(l)
else:
    print("输入的数值超出了范围,程序结束")
#

# 法二:
# 自幂数
start = 0
end = 0
digit = 0
m = 0
n = int(input('请选择自幂数的位数【1,2,3,4,5,6】:'))
while 0 < n < 7:
    start = pow(10, n - 1)
    end = pow(10, n) - 1
    print(n, '位数的自幂数有:')
    for k in range(start, end + 1):
        m = k
        total = 0
        while m != 0:
            digit = m % 10
            total += pow(digit, n)
            m = m // 10
        if total == k:
            print(str(k), end=' ')
    n = int(input('\n 请选择自幂数的位数【1,2,3,4,5,6】:'))
else:
    print('输入位数不在范围内,程序结束。')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值