查找n位数的水仙花数

数字变字符串,再将字符串分离。
比如一个3位的十进制整数153就是一个水仙花数。因为 153 = 1^3 + 5^3 + 3^3。
而一个4位的十进制数1634也是一个水仙花数,因为 1634 = 1^4 + 6^4 + 3^4 + 4^4。
给出n,找到所有的n位十进制水仙花数。

n = 3
if n == 1:
    start = 0
else:
    start = 10 ** (n - 1)
end = 10 ** n
print(start, end)
for i in range (start,end):
    str1 = str(i)
    sum1 = 0
    for j in range(len(str1)):
        sum1 = sum1 + int(str1[j]) ** n
    if i == sum1:
        print(i)

结果:

100 1000
153
370
371
407
Process finished with exit code 0

lintcode:

class Solution:
    """
    @param n: The number of digits
    @return: All narcissistic numbers with n digits
    """
    def getNarcissisticNumbers(self, n):
        # write your code here
        if n == 1:
            start = 0
        else:
            start = 10 ** (n -1) 
        end = 10 ** n
        list1 = []
        for i in range(start,end):
            str1 = str(i)
            sum1 = 0
            for j in range(len(str1)):
                sum1 = sum1 + int(str1[j]) ** n
            if i == sum1:
                list1.append(i)
        return list1

再一次刷到这题:
相比上一次,直接用for遍历字符串的值,而不是下标。

class Solution:
    """
    @param n: The number of digits
    @return: All narcissistic numbers with n digits
    """
    def getNarcissisticNumbers(self, n):
        # write your code here
        if n == 1:
            start = 0
        else:
            start = 10 ** (n - 1)
        end = 10 ** n
        list = []
        for i in range(start,end):
            sum = 0
            for j in str(i):
                sum = sum + int(j) ** n
            if i == sum:
                list.append(i)
        return list

百度给出的判断一个数是否为水仙花数的方法:
https://baike.baidu.com/item/水仙花数/2746160?fr=aladdin

def narcissistic_number_1(num):
    length = len(str(num))
    count = length    
    num_sum = 0    
    while count:        
        num_sum += ((num // 10 ** (count - 1)) % 10) ** length     
        count -= 1    
    else:        
        if num_sum == num:   
            print("%d is %d bit narcissistic_number" % (num, length))
        else:                        
            print("%d is not a narcissistic_number" % num)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值