数字变字符串,再将字符串分离。
比如一个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)