输入一个正整数n,求100到n之间水仙花数的个数

img


怎么改都不对,是不是要建一个列表?然后用列表统计长度,但这个方法好像不太行,有没有推荐别的方法?

不用列表,因为水仙花数特指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}')

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7689093
  • 除此之外, 这篇博客: Python基础练习题(按条件对指定序列求和,打印99乘法表、求斐波那契数列、百马百担、求水仙花数、求n以内的所有质数(素数)和)中的 1.求100(含100)以内所有偶数的和 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • range(start,end,step)这个序列生成器,和那个切片的语法一样,含头不含尾,step是步长,这里就不需要在对j进行判断了,对于这些简单求奇数和、求偶数和,就n的倍数和等等就可以这样做

    s = 0
    for j in range(0,101,2):
        s = s + j
    print(s) # 2550
    
  • 以下回答由chatgpt基于相关博客总结生成:

    水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如,153是一个水仙花数,因为153=1^3+5^3+3^3。 要解决这个问题,我们可以按照以下步骤进行操作:

    1. 输入一个正整数n,表示要计算的范围上限。
    2. 使用一个循环从100到n遍历每一个数字。
    3. 对每个数字判断是否是水仙花数:
    4. 将当前数字转换成字符串,以便对每个位上的数字进行操作。
    5. 初始化一个变量sum为0,用于存储每个位上数字的n次幂之和。
    6. 使用另一个循环遍历每个位上的数字:
      • 将每个位上的数字取出,并计算其n次幂。
      • 将计算结果累加到sum上。
    7. 判断sum是否等于当前数字,如果是,则该数字是水仙花数,计数器加1。
    8. 返回计数器的值,即水仙花数的个数。

    下面是使用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,通过生成器表达式对生成的水仙花数进行计数。最后,我们输出计数结果。