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 打印水仙花数(通俗易懂) 的相关文章

  • Gradle 构建错误:无法从 https://repo1.maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml 加载 Maven 元数据

    我在 Android studio 中遇到 gradle 构建错误 如下所示 Error A problem occurred configuring project MyApp Could not resolve all dependen
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url

随机推荐