获取第M个水仙花数

"""
/*
所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身,
例如153=1^3+5^3+3^3,153是一个三位数
输入描述
    第一行输入一个整数N,
    表示N位的正整数N在3-7之间包含3,7
    第二行输入一个正整数M,
    表示需要返回第M个水仙花数
输出描述
    返回长度是N的第M个水仙花数,
    个数从0开始编号,
    若M大于水仙花数的个数返回最后一个水仙花数和M的乘积,
    若输入不合法返回-1

示例一:

    输入
     3
     0
    输出
     153
    说明:153是第一个水仙花数
 示例二:
    输入
    9
    1
    输出
    -1
 */
"""
 import math
    N = int(input().strip())
    M = int(input().strip())
    MinNum = int(math.pow(10,N-1))
    MaxNum = int(math.pow(10,N))
    res = list()
    if N < 3 or N > 7:
        print(-1)
    else:
        for i in range(MinNum,MaxNum):
            summ = 0
            bit = MinNum
            while bit != 1:
                print(i//bit)
                summ += int(math.pow(i//bit%10,N))
                bit //= 10
            summ += int(math.pow(i%10,N))
            if summ == i:
                res.append(summ)

            if len(res)-1 == M:
                print(res[M])
                break
            
        if M > len(res):
            print(res[-1]*M)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值