4.6.5 水仙花数
【例4-29】显示所有“水仙花数”。所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。
例如:153是“水仙花数”,153=13+53+33。
按“三步法”原则分析如下。
做什么
此程序不需要任何输入信息,而是根据水仙花数的定义求出所有的水仙花数,所以窗体上只需要一个按钮即可。
怎么做
分析:此问题有两种方法解决。
方法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。
实现
●用For语句实现:
方法1
方法2
●用Do…Loop语句实现:
方法1
方法2
●用While语句实现:
方法1
方法2