java 打印水仙花数(通俗易懂)

简介: Java中如何打印出水仙花数,详解!

目录

前言 :

思路 :

代码 :

总结 :


前言 :

       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是水仙花的意思,如图所示 :

image.png        

       也不用背这词儿,基本用不上,而且写几次也就记住了。Daffodil类代码如下 :

packageknowledge.control;
/*requirement : 统计所有的水仙花数。注:水仙花数是三位数。它的每位上的数字的3次幂之和等于它本身。*/publicclassDaffodil {
publicstaticvoidmain(String[] args) {
intcount=0;              //count是一个计数器,用来统计总共的水仙花数的数量。for (inti=100; i<1000; ++i) {
inta=i%10;           //个位intb= (i/10)%10;      //十位 也可以写作:int b = (i%100) / 10;intc= (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 :Δ干掉比它高位的用取余的方法,干掉比他低位的用整除的方法。*/

image.gif

       输出结果 :

image.png

总结 :

       看到了吧,从100到1000这么多数字,居然只有4个水仙花数,是不是应该铭记于心(bushi)。好的,也不用太感慨,想想你出生是多大的概率,所以,好好学习,孝顺父母。感谢阅读!

System.out.println("END--------------------------------------------------------------------");

目录
相关文章
|
机器学习/深度学习 JavaScript 前端开发
使用不同语言实现水仙花数(python | c++ | java | javascript | php)
使用不同语言实现水仙花数(python | c++ | java | javascript | php)
116 0
|
Java
Java经典编程习题100例:第5例:输出所有的水仙花数
Java经典编程习题100例:第5例:输出所有的水仙花数
113 0
JAVA-水仙花数
JAVA-水仙花数
354 0
|
Java
1、Java——三种方式循环出水仙花数
1、Java——三种方式循环出水仙花数
618 0
|
Java
Java 水仙花数(解析说明)
水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:13+53+33=153)
450 0
|
Java
JAVA实现输入一个数判断是否是水仙花数(不限位数)
JAVA实现输入一个数判断是否是水仙花数(不限位数)
204 0
JAVA实现输入一个数判断是否是水仙花数(不限位数)
(JAVA编程练习):今天练习“水仙花数”+“九九乘法表”。
(JAVA编程练习):今天练习“水仙花数”+“九九乘法表”。
(JAVA编程练习):今天练习“水仙花数”+“九九乘法表”。
|
Java
水仙花数JAVA
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
112 0