目录
前言 :
思路 :
代码 :
总结 :
Hi,guys.今天和大家分享一下java打印所有水仙花数的两种方式。先来说说什么是水仙花数?水仙花数指的是一类三位数,它的个位、十位,百位上的数字的3次幂之和等于它本身。因此,要想判断一个数是不是水仙花数,首先它必须是一个三位数,然后我们再分别取出它的个位、十位,百位,取三次幂之和,判断是否与原数相等。重点在于取的部分:
我们就以654这个三位数为栗,来判断它是不是水仙花数。
首先取出它的个位,让654对10取余,654 % 10 = 654 - (654/10) * 10 = 4。其实个位没什么好说的,对10取余嘛,百位十位都是10的倍数,留下一个余数不就是个位数嘛(原理)。(个位0~9,是小于10的)。
再取出它的十位,这时候我们有两种思路:
第一种思路是先掐头后去尾,即654先想办法干掉百位数字6,再干掉个位数字4,留下的不就是十位的数字5吗?那怎么干掉百位数字6呢?很简单,我们取个位数字的时候是不是要干掉十位数字和百位数字?当时我们让654对10取余,即654 % 10,原理上面也说了,就因为百位十位都是10的倍数。那同理,百位是100的倍数,我们让它对100取余,剩下的就是十位和个位的一个两位数,这么着不久把百位数字干掉了?即654 % 100 = 54。然后下一步是干掉个位数字,记住一句话,干掉比它高位的用取余的方法,干掉比他低位的用取整的方法。所以,个位比十位低,现在要干掉个位当然是用取整的方法。对几取整呢?不妨想想取整的效果:保留高位,扔掉低位。So,对10取整就可以干掉个位了,即54 / 10 = 5。总的来看就是(654%100) / 10 = 5。
第二种思路是先去尾后掐头,即654先想办法干掉个位数字4,再干掉百位数字6,留下的不就是十位的数字5吗?利用我们刚才的结论 : 干掉比它高位的用取余的方法,干掉比他低位的用取整的方法。这下我们就轻松多了:
先干掉个位?个位比十位低,取整!654 / 10 = 65。
再干掉百位?百位比十位高,取余!65 % 10 = 5。
你看看,多快!这不就出来了?所以总的来看就是(654 / 10) %10 = 5。
最后就是取出它的百位了,仍然有两种思路 :
第一种思路是暴力型:一次性干掉。什么意思呢?还是先把我们的结论摆过来: 干掉比它高位的用取余的方法,干掉比他低位的用取整的方法。我们现在要的是百位啊,个位十位全都要干掉,但是个位十位都比百位低呀,直接对100取整不就完了?654 / 100 = 6,结束!
第二种思路是温柔型:慢慢干掉。什么意思呢?就是先干掉个位再干掉十位,看屁股还要一半一半砍。怎么干掉个位?还是结论:干低位,用取整。654 / 10 = 65就了。怎么干掉十位?65 / 10 = 6。EasyMoney!总的来看就是(654 /10 /10)= 6。当然,为了写出来好看,你也可以照应前面求十位第二种思路“(654 / 10) %10 = 5”,而最终写做(654 /10 /10) % 10 = 6。
好滴,654的个位十位百位都成功取出来了,下一步就是算呗,6*6*6 + 5*5*5 + 4*4*4 = 405。405不等于654,所以654这个三位数不是水仙花数!这时候就要有p小将(personable小将,指风度翩翩的人)出来急了:弄了半天居然不是水仙花数呀,你搁这儿扯犊子呢?p小将你先别急,咱们好歹是Java博文,你肯定要上代码呀,到时候你把654换成变量x,再整一个for循环,所有的水仙花数不就都出来。
我们以Daffodil类作为演示类,daffodil是水仙花的意思,如图所示 :
也不用背这词儿,基本用不上,而且写几次也就记住了。Daffodil类代码如下 :
package knowledge.control;
/*
requirement : 统计所有的水仙花数。
注:水仙花数是三位数。它的每位上的数字的3次幂之和等于它本身。
*/
public class Daffodil {
public static void main(String[] args) {
int count = 0; //count是一个计数器,用来统计总共的水仙花数的数量。
for (int i=100; i<1000; ++i) {
int a = i%10; //个位
int b = (i/10)%10; //十位 也可以写作:int b = (i%100) / 10;
int c = (i/10/10)%10; //百位 也可以写作: int c = i / 100;
if ((a*a*a + b*b*b + c*c*c) == i) {
count++;
System.out.println("第" + count + "个水仙花数为:" + i);
}
}
System.out.println("水仙花数的个数为:" + count);
}
}
/*
Summary :
Δ干掉比它高位的用取余的方法,干掉比他低位的用整除的方法。
*/
输出结果 :
看到了吧,从100到1000这么多数字,居然只有4个水仙花数,是不是应该铭记于心(bushi)。好的,也不用太感慨,想想你出生是多大的概率,所以,好好学习,孝顺父母。感谢阅读!
System.out.println("END--------------------------------------------------------------------");