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

                

        也不用背这词儿,基本用不上,而且写几次也就记住了。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--------------------------------------------------------------------"); 

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_RA9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值