求水仙花数面试题 撸它

时间:2022-07-22
本文章向大家介绍求水仙花数面试题 撸它,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Lintcode 147: 求水仙花数

水仙花数的定义是,这个数等于他每一位数上的幂次之和 见维基百科的定义

比如一个3位的十进制整数153就是一个水仙花数。

因为 153 = 13 + 53 + 33。

而一个4位的十进制数1634也是一个水仙花数

因为 1634 = 14 + 64 + 34 + 44。

给出n,找到所有的n位十进制水仙花数。

样例 样例 1:

输入: 1 输出: [0,1,2,3,4,5,6,7,8,9] 样例 2:

输入: 2 输出: [] 样例解释: 没有2位数的水仙花数。 注意事项 你可以认为n小于8。

源代码

class Solution:
    """
    @param n: The number of digits
    @return: All narcissistic numbers with n digits
    """
    def getNarcissisticNumbers(self, n):
        func = lambda x: int(x)**n
        nums = []

        for i in range((10**(n-1))-1, 10**n):
            if i == sum(map(func, [c for c in str(i)])):
                nums.append(i)
        return nums

字节ZJ17: 水仙花数

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3。现在要求输出所有在m和n范围内的水仙花数。

输入描述: 输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。

输出描述: 对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;如果给定的范围内不存在水仙花数,则输出no;每个测试实例的输出占一行。

示例1

输入 100 120 300 380

输出 no 370 371

func = lambda x: int(x)**n

while 1:
    try:
        n, m = list(map(int, input().split()))
        nums = []
        for i in range(n, m+1):
            if i == sum(map(func, [c for c in str(i)])):
                nums.append(str(i))
        if nums:
            print(" ".join(nums))
        else:
            print("no")
    except:
        break

end