超简单地输出所有水仙花数(Java实现)

超简单地输出所有水仙花数(Java实现)Java 实现输出水仙花数 保姆级

超简单地输出所有水仙花数(Java实现)

今天打算将以前简单又基础的练习题拿出来分享以下,虽然很简单,但也很适合刚入门的小白练练手,熟悉熟悉以下。

 ?‍?开场还是得简单以下水仙花数是一种什么样的数。


 ❀水仙花数:        

        水仙花数只是自幂数的一种,也被称为(超完全数字不变数)水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身,例如:1^3 + 5^3+ 3^3 = 153。严格来说3位数的3次幂数才称为水仙花数。可还存在着其它位数所对应的水仙花数。

例如:

三位自幂数:水仙花数;三位的水仙花数共有4个:153,370,371,407;

四位自幂数:四叶玫瑰数;四位的四叶玫瑰数共有3个:1634,8208,9474;

五位自幂数:五角星数;五位的五角星数共有3个:54748,92727,93084;

六位自幂数:六合数;六位的六合数只有1个:;

=====================================================================

等等,对于这些水仙花数的名称我们无需了解,只要知道是什么原理就可以,无非就是对于几位数的每一位上的自身几次幂之和等于本身(例如五位数,每一位进行五次幂之后再相加得出的结果会等于这个五位数,就符合条件),就属于水仙花数。

废话不多说,接下来分析如何通过代码如何实现输出水仙花数。

如果单单打印所有的3位水仙花数,下面这个代码应该是最无脑的。

对于打印3位的水仙花数,我们可以稍微分析一下,

水仙花数对应的是每一位数自身位数的幂相加等于自身,那么如果要实现这个代码,可以把从100到999的每一数字的个十百位提取出来,然后加以比较,看看是否符合条件,如果符合条件则打印,否则则继续循环,直到将100到999的每个数判断完为止。

代码示例:

public class TestDemo1 { public static void Prints(){ for (int i = 100; i < 1000; i++) { int j = i % 10; //个位 int k = i / 10 % 10; //十位 int l = i / 100; //百位 if (i==(j*j*j)+(k*k*k)+(l*l*l)) { System.out.print(i + " "); } } } public static void main(String[] args) { System.out.println("打印1到1000内的符合水仙花的数"); Prints(); } } //运行结果: //打印1到1000内的符合水仙花的数 //153 370 371 407 

其中判断条件可以利用Java内的Math类进行以某一位数为底数,以一共几位数为指数的幂值,例如163——-Math.pow(1,3)+Math.pow(6,3)+Math(3,3);

=====================================================================

Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。

超简单地输出所有水仙花数(Java实现)

 

public class TestDemo1 { public static void Prints(){ for (int i = 100; i < 1000; i++) { int j = i % 10; //个位 int k = i / 10 % 10; //十位 int l = i / 100; //百位 if (i==Math.pow(j,3)+Math.pow(k,3)+Math.pow(l,3)) { System.out.print(i + " "); } } } public static void main(String[] args) { System.out.println("打印1到1000内的符合水仙花的数"); Prints(); } }

但如果我们不止想打印三位数的水仙花数,还想打印四位的,五位的,甚至是六位的,用上面这种方法太局限了,是无法实现 。要想实现打印跟高位数的水仙花数,得多增添一步,判断当前数的位数是多少,再根据位数进行对应幂数的相加。

(1)首先我们以打印从1到为例的水仙花数(0不为水仙花数),先在循环内写一个判断位数的代码。

 while(j!=0){ //判断当前数是几位数(j是1到某一个数,通过for循环内的i来赋给j,在每一次循环中进行一次赋值) ret++; //位数值 j/=10; //通过每一次除10来使当前值进行循环判断 }

(2)之后就可以求每一位数的幂和,将i赋给一个新的整型n,通过n取余来提取个位数后,再通过除10来对n进行更新,以sum来计算幂的和,当n除到等于0时,便结束提取的过程。

while(n!=0){ //计算每一位数幂的和 sum+=Math.pow(n%10,ret); n/=10; }

(3)最后判断是否满足每一位数的幂和,是否等于自身,满足条件输出,不满足则跳过,继续循环判断。

if(sum==i){ System.out.println(i); }

=====================================================================

完整代码:

public class TestDemo2 { public static void Print() { for (int i = 1; i < 999_999; i++) { int j=i,ret=0,n=i,sum=0; while(j!=0){ //判断当前数是几位数 ret++; j/=10; } while(n!=0){ //计算每一位数幂的和 sum+=Math.pow(n%10,ret); n/=10; } if(sum==i){ System.out.print(i+" "); } } } public static void main(String[] args) { Print(); } } //运行结果: //1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231684.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 系统架构师(1)计算机组成与结构[通俗易懂]

    系统架构师(1)计算机组成与结构[通俗易懂]1.计算机硬件组成计算机得硬件基本系统由五大部分组成运算器、控制器、存储器、输入设备、输出设备存储器分为内部存储器:内存,容量小。特点是速度快,临时存放数据。外部存储器:硬盘,光盘。特点是容量大,速度慢,能长期存储数据。输入设备:键盘、鼠标。输出设备:音响、显示器。主机:CPU+主存储器…

    2022年5月30日
    83
  • live2d 添加对应mine值,mtn,moc文件404

    live2d 添加对应mine值,mtn,moc文件404

    2022年2月20日
    49
  • MFC读取excel数据

    MFC读取excel数据CDatabasedatabase; CStringsDriver; CStringsItem1,sItem2; CStringsDsn; CStringsFile=””;//filename CStringsSql; CFileDialogdlg(TRUE,//true为打开,false为创建 “xls”, “FileList”,

    2022年6月16日
    31
  • Flicker-detect Sensor_sensorless sensing

    Flicker-detect Sensor_sensorless sensingSensor在日光灯作为光源下获取图像数据时会产生flicker,其根本原因是照在不同pixel上光能量不同产生的,所接受的光能量的不同也就是图像的亮度的不同。电源的频率有两种标准:50Hz(大陆)和60Hz(台湾、日本)的正弦波形,当然能量是没有方向性的,因此对应的能量是一个频率为100Hz和120Hz的波形,如下图1所示:图1、60Hz电源频率及能量波形      由于能量在时间…

    2022年10月13日
    2
  • 如何使用eclipse创建JAVA项目并写一个简单的HelloWorld

    如何使用eclipse创建JAVA项目并写一个简单的HelloWorld打开eclipse软件,选择好工作区域(就是项目的储存地址)后登陆。File-New-Project选择JavaProject输入项目名称点击完成(Finish)在SRC(SRC是专门放java源代码的文件夹,就是你在IDE里编写的各个java类的文件都在里面)中新建package包包的命名规范:包名全部使用小写。包名通常由若干个标识符…

    2022年7月24日
    7
  • CreateFile()打开串口失败,返回句柄值为0xffffffff

    CreateFile()打开串口失败,返回句柄值为0xffffffff出错情况:设备1和设备2分别使用COM1和COM2外界通信,在不关闭软件的情况下,调换串口(即设备1/2,分别使用COM2/1),此时出错?以下是查找原因的步骤:_hCommHandle=::CreateFile( _szCommStr, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLA

    2022年5月16日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号