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

举报
Cyan_RA9 发表于 2023/04/03 17:27:53 2023/04/03
【摘要】 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类代码如下

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 :
        Δ干掉比它高位的用取余的方法,干掉比他低位的用整除的方法。
 */

image.gif

        输出结果 :

image.png

总结 : 

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。