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

2023-05-16

目录

前言 : 

思路 : 

代码 : 

总结 : 


前言 : 

        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--------------------------------------------------------------------"); 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 打印水仙花数(通俗易懂) 的相关文章

  • java try catch 程序流程什么时候中断?

    你好 我对 Java 中的异常处理不太熟悉 所以 正如主题在基本 try catch 块中所述 当我在 Try 块中捕获异常时 程序流程何时中断 try some code that raises an Exception catch Ex
  • 如何使用retrofit2动态设置超时?

    public class Router private static Retrofit retrofit null public Retrofit getRetrofit if retrofit null OkHttpClient clie
  • 检查发送到网页的请求数

    我正在编写一个 Java 多线程应用程序 它可以访问不同 Web 服务器的数百万个 有时甚至数十亿个 URL 这个想法是检查这些 URL 是否给出有效的 200OK 响应或 404 其他代码 我如何知道我的程序是否不会在他们的服务器上造成高
  • jvm中本机代码如何转换为机器代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过一些文章说 jvm将字节码转换为机器码 jvm将字节码转换为本机代码 jvm 将字节码转换为系统调用 系统调用又由操作系统与硬件
  • 通过 html tidy 提供渲染 jsp 页面

    我有一个在 Glassfish 上运行的 Java 项目 它会呈现一些难看的 HTML 这是使用各种内部和外部 JSP 库的副作用 我想设置某种渲染后过滤器 通过 HTMLTidy 提供最终的 HTML 这样源代码就很好且整洁 有助于调试
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • Java Spark DataFrameReader java.lang.NegativeArraySizeException

    学习 Spark for java 并尝试阅读 csv文件为DataFrame使用DataFrameReader 甚至不能得到一个超级简单的 csv文件工作 因为我不断收到异常java lang NegativeArraySizeExcep
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • MediaPlayer.create() 始终返回 null

    我以前用过媒体播放器 从来没有遇到过这个问题 每当我尝试使用 MediaPlayer create 时 该方法都会给我 null 并且我无法播放声音 我有什么遗漏的吗 public class Game extends Activity p
  • 按文件名过滤 eclipse 中的警告

    我们使用 Eclipse 进行 Java 开发 并使用 Maven 将 JSP 编译成 servlet 以便在嵌入式 Jetty 实例中使用 这意味着要从 Eclipse 运行该项目 我必须包含 target jsp source 作为源文
  • spring mvc 跟踪引用页面

    在基于注释的弹簧控制器中 如果用户正在url com first page并点击一个链接或提交一份表格指出url com second page 如何制作second page知道url of first page所以这样second pa
  • SwingWorker 在另一个 SwingWorker 的 did 方法中

    首先 我需要通知您 我正在尽最大努力学习如何用 Java 编写代码 虽然有点困难 但我相信我能做到 我过去提交了几个有关 SwingWorkers 等的问题 每一个我都以为我已经做到了 但后来发现我仍然需要学习 希望这一次不是那样的一次 话
  • 为什么下面代码的输出是Thread[main,5,main]

    public class test1 public static void main String args TODO Auto generated method stub Thread t Thread currentThread Sys
  • 如何使用 Selenium 中的索引切换到窗口

    由于selenium不提供切换到窗口 多个窗口 的方法 但我想使用index html自定义方法来切换到不同的窗口 但下面的代码没有按预期工作 请建议以下方法的最佳实施 public void switchToWindowIndex int
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • ASTParser:解析绑定后查找声明节点

    我创建了一个启用了绑定的 AST 当我稍后解析绑定时 我得到了一个有效的 ITypeBinding 但是 当我想要获取绑定的声明 Node 时 它 总是返回 null 除非 ITypeBinding 在 sourceFile 中声明 这是我
  • 如何在 Log4j2 - JSON 布局中自定义或删除默认属性

    In Spring Boot 2我已配置的应用程序Log4j2 with JsonLayout像下面这样
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下

随机推荐