4.6.5  水仙花数

4.6.5 水仙花数

【例4-29】显示所有“水仙花数”。所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。

例如:153是“水仙花数”,153=13+53+33

按“三步法”原则分析如下。

978-7-111-49659-5-Chapter04-258.jpg做什么

此程序不需要任何输入信息,而是根据水仙花数的定义求出所有的水仙花数,所以窗体上只需要一个按钮即可。

978-7-111-49659-5-Chapter04-259.jpg怎么做

分析:此问题有两种方法解决。

方法1:3位数的范围为100~999,要判断一个数是否为水仙花数,必须把这个数的个位、十位、百位拆分出来,然后才能计算它们的立方和,所以问题关键在于如何提取一个3位数的个位、十位、百位上的数字。这里可以采用Mod求余运算和“\”整除运算来获得。

步骤描述如下。

1)初始化循环控制变量i为100。

2)判断i,如果i小于或等于999,则继续向下执行,否则执行第10)步。

3)分离出个位(变量为gewei),gewei等于i除以10所得的余数。

4)分离出十位(变量为shiwei),shiwei等于用i除以10所得的商再次除以10所得的余数。

5)分离出百位(变量为baiwei),baiwei等于i除以100所得的商。

6)判断i与3个数字的立方和关系,如果相等,则i为水仙花数,继续向下执行,否则执行第8)步。

7)记录i值,把它连接到s字符串中(s用来保存所有水仙花数),继续向下执行。

8)i值增1。

9)返回第2)步。

10)输出s。

方法2:一个3位数是由3个阿拉伯数字组成的,并且个位、十位、百位上的数字的变化范围是确定的:百位上数字的变化范围为1~9;十位和个位数字变化为0~9。由每位上的数字可以容易计算出它们的立方和,而此问题关键在于如何利用这3个数字生成这个3位数。

步骤描述如下。

1)初始化控制变量baiwei为1。

2)判断baiwei,如果baiwei<=9,则继续向下执行,否则执行第15)步。

3)初始化控制变量shiwei为0。

4)判断shiwei,如果shiwei<=9,则继续向下执行,否则执行第13)步。

5)初始化控制变量gewei为0。

6)判断gewei,如果gewei<=9,则继续向下执行,否则执行第11)步。

7)判断baiwei*100+shiwei*10+gewei(由这3个数字组成的3位数)与baiwei3+shiwei3+gewei3(这三个数的立方和)的关系,如果相等,则这个3位数是水仙花数,继续向下执行,否则执行第9)步。

8)记录下这3个数字,把它们保存到s中(s用来保存所有水仙花数),继续向下执行。

9)gewei增1。

10)返回第4)步。

11)shiwei增1。

12)返回第4)步。

13)baiwei增1。

14)返回第2)步。

15)输出s。

978-7-111-49659-5-Chapter04-260.jpg实现

●用For语句实现:

方法1

978-7-111-49659-5-Chapter04-261.jpg

方法2

978-7-111-49659-5-Chapter04-262.jpg

●用Do…Loop语句实现:

方法1

978-7-111-49659-5-Chapter04-263.jpg

方法2

978-7-111-49659-5-Chapter04-264.jpg

●用While语句实现:

方法1

978-7-111-49659-5-Chapter04-265.jpg

978-7-111-49659-5-Chapter04-266.jpg

方法2

978-7-111-49659-5-Chapter04-267.jpg