不用列表,因为水仙花数特指3位
n = input()
n = int(n)
sum = 0
for i in range(100, n):
a = i // 100
b = i // 10 % 10
c = i % 10
if a * a * a + b * b * b + c * c * c == i:
# print(i)
sum += 1
print(sum)
或者,如果你希望更多位
n = input()
n = int(n)
sum = 0
for i in range(100, n):
j = i
k = 0
while j > 0:
k += (j % 10) ** len(str(i))
j //= 10
if k == i:
sum += 1
print(sum)
有帮助 采纳一下
# 输入正整数n
n = int(input('请输入正整数n: '))
# 计数器
count = 0
# 从100开始遍历到n
for i in range(100, n+1):
# 计算百位、十位和个位数字的立方和
sum = 0
x = i
while x > 0:
digit = x % 10
sum += digit ** 3
x //= 10
# 判断如果数字等于各位立方和则计数
if i == sum:
count += 1
print(f'100到{n}之间水仙花数的个数是:{count}')
range(start,end,step)这个序列生成器,和那个切片的语法一样,含头不含尾,step是步长,这里就不需要在对j进行判断了,对于这些简单求奇数和、求偶数和,就n的倍数和等等就可以这样做
s = 0
for j in range(0,101,2):
s = s + j
print(s) # 2550
水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如,153是一个水仙花数,因为153=1^3+5^3+3^3。 要解决这个问题,我们可以按照以下步骤进行操作:
下面是使用Python编写的代码实现:
def count_narcissistic_numbers(n):
count = 0 # 计数器,记录水仙花数的个数
for num in range(100, n+1):
digit_sum = 0
for c in str(num):
digit_sum += int(c)**len(str(num))
if digit_sum == num:
count += 1
return count
# 测试
n = int(input("请输入一个正整数n:"))
result = count_narcissistic_numbers(n)
print("100到", n, "之间的水仙花数个数为:", result)
运行该代码,输入一个正整数n,即可得到100到n之间水仙花数的个数。
另外,如果你想优化这段代码,你可以采用生成器的方式来获取水仙花数,而不是将它们全部存储在列表中。这样可以减少内存的使用,尤其是在处理大范围的数时会更高效。以下是相应的代码示例:
def narcissistic_numbers(n):
for num in range(100, n+1):
digit_sum = 0
for c in str(num):
digit_sum += int(c)**len(str(num))
if digit_sum == num:
yield num
# 测试
n = int(input("请输入一个正整数n:"))
count = sum(1 for _ in narcissistic_numbers(n))
print("100到", n, "之间的水仙花数个数为:", count)
这段代码中,我们创建了一个生成器函数narcissistic_numbers
,并使用yield
语句来返回水仙花数。然后,我们使用一个计数器count
,通过生成器表达式对生成的水仙花数进行计数。最后,我们输出计数结果。