1.概念理解:要设计程序输出“水仙花数”,就需要知道“水仙花数”的概念。我们把一个三位数其各位数字的立方和等于该数本身的数字称为“水仙花数”。例如,153是“水仙花数”,因为153=1*1*1+5*5*5+3*3*3。

2.问题分析:根据“水仙花数”的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为A),若A与给出的三位数相等,三位数为“水仙花数”,反之,则不是。

3.算法设计:“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是100~999。

对应的循环条件如下:

(1)将n整除以100,得出n在百位上的数字hun。

(2)将(n-i*100)整除以10(或将n先整除以10再对10求模n/10%10),得出n在十位上的数字ten。

(3)将n对10取余,得出n在个位上的数字ind。

(4)求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数。

对于每个位置上的数值将其拆分的算法有很多种,根据不同情况选择不同算法(对于同一问题不同算法的效率有时会相差很多)。

4.程序框架程序流程图:

三味水仙花python python三位数水仙花数的编程_整除

5.程序代码:

三味水仙花python python三位数水仙花数的编程_三味水仙花python_02

# -*- coding:utf-8 -*-

#所有三位数的范围是100-999list1=[]fori inrange(1,10): #遍历百位1-9forj inrange(0,10): #遍历十位0-9fork inrange(0,10): #遍历个位0-9ifi**3+j**3+k**3==i*100+j*10+k: #等式方程#print(i*100+j*10+k) 测试输出效果list1.append(i*100+j*10+k) print("打印出所有的“水仙花数”,它们是:%s"%list1)

6.程序分析:

使用最直接有效的方法,将每个数字进行读取和计算,从100开始,直到999结束,把个位、十位、百位进行逐步计算,把满足条件的数字进行记录。

7.问题拓展求某个数 n 的三次方,可以采用程序中的方法对n连乘三次n*n*n,求五次方、十次方运用这种方法仍可忍受,但如果要求的是n的50次方甚至更大呢?也要像上面一样写50次吗?对于编程者来说这是很痛苦的一种事情,既浪费时间又浪费精力。是否有更好的方法去解决,欢迎大家一起来探讨。感谢您读完了子甲园的分享,欢迎的请留言共同探讨各种逻辑思维和Python开发设计。