当前位置:优草派 > 问答 > Python问答

编程求出水仙花数

标签: Python  Python开发  水仙花数  作者: jczds100

回答:

水仙花数是一个十分有趣的数学概念,它是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身。例如,153是一个水仙花数,因为1^3+5^3+3^3=153。本文将从多个角度分析如何用编程来求出水仙花数。

首先,我们可以使用循环来求出水仙花数。假设我们要求3位数的水仙花数,那么我们可以从100开始循环到999,对于每一个数,我们可以将它的每个位上的数字的三次幂相加,如果等于它本身,那么就是一个水仙花数。代码如下:

```

for i in range(100, 1000):

a = i // 100 # 百位数

b = (i // 10) % 10 # 十位数

c = i % 10 # 个位数

if a**3 + b**3 + c**3 == i:

print(i)

```

这段代码中,我们使用了Python的range函数来生成从100到999的数,然后通过整除和取余来获取每个数的百位数、十位数和个位数。最后,我们判断它们的三次幂之和是否等于这个数本身,如果是,就输出这个数。

除了使用循环外,我们还可以使用递归来求出水仙花数。递归是一种函数调用自身的技术,在这里,我们可以定义一个函数来判断一个数是否是水仙花数,如果是,就输出这个数,否则,就递归地调用这个函数。代码如下:

```

def narcissistic_number(n):

if n < 100 or n > 999:

return

a = n // 100 # 百位数

b = (n // 10) % 10 # 十位数

c = n % 10 # 个位数

if a**3 + b**3 + c**3 == n:

print(n)

narcissistic_number(n+1)

narcissistic_number(100)

```

这段代码中,我们定义了一个名为`narcissistic_number`的函数,它接受一个参数n,表示要判断的数。在函数内部,我们首先判断n是否是一个三位数,如果不是,就直接返回。然后,我们通过整除和取余来获取n的百位数、十位数和个位数,判断它们的三次幂之和是否等于n,如果是,就输出n。最后,我们递归地调用`narcissistic_number`函数,并传入参数n+1,继续判断下一个数是否是水仙花数。

除了使用循环和递归外,我们还可以使用列表推导式来求出水仙花数。列表推导式是Python中非常强大的一种语法,它可以通过一行代码生成一个列表。在这里,我们可以使用列表推导式来生成所有的三位数,然后通过判断它们是否是水仙花数来筛选出水仙花数。代码如下:

```

narcissistic_numbers = [i for i in range(100, 1000) if (i//100)**3 + ((i//10)%10)**3 + (i%10)**3 == i]

print(narcissistic_numbers)

```

这段代码中,我们使用了列表推导式来生成所有的三位数,然后使用if语句来筛选出水仙花数。最后,我们将水仙花数存储在名为`narcissistic_numbers`的列表中,并输出这个列表。

综上所述,我们可以使用循环、递归和列表推导式来求出水仙花数。无论是哪种方法,都可以帮助我们更好地理解水仙花数的概念,并提高我们的编程能力。

TOP 10
  • 周排行
  • 月排行