python水仙花数

题目描述
输山不大于n的所有“水仙花数”。所谓 “水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

回答如下,记得采纳一下哦!

def func():
    for num in range(100, n+1):
    # 获取百位、十位、个位数字
    hundreds = num // 100
    tens = (num //10) %10
    ones = num % 10

    # 判断是否为水仙花数
    if num == hundreds**3 + tens**3 + ones**3:
        print(num)
n = int(input("请输入一个正整数n: "))
if n<100 or n>999:
    print("输入错误")
else:
    func(n)
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7738825
  • 这篇博客你也可以参考下:水仙花数的三种解决方法(Python实现)
  • 除此之外, 这篇博客: Python经典练习题——求水仙花数中的 基于循环来计算严格的“水仙花数” 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  1# 方法一
     2start = 101
     3end = 999
     4for i in range(start, end + 1):
     5    # 计算百位上的数
     6    bai = i // 100
     7    # 计算十位、个位上的数
     8    shi, ge = (i - bai * 100) // 10, i % 10
     9    # 判断是否为水仙花数
    10    if ge ** len(str(i)) + shi ** len(str(i)) + bai ** len(str(i)) == i:
    11        print(i)
    

    上面算法只能计算三位的水仙花数,该算法只需要使用单层循环,并通过数学整除、求余来计算百位、十位、个位上的数,然后判断该数是否为水仙花数。

    总结来说,这个算法简单、易懂、适合初学者上手学习,而且这个算法只需要单层循环;这个算法最大的问题是不适合计算多位的“自幂数”。

    下面对这个方法略作改进。