今天打算将以前简单又基础的练习题拿出来分享以下,虽然很简单,但也很适合刚入门的小白练练手,熟悉熟悉以下。
开场还是得简单以下水仙花数是一种什么样的数。
❀水仙花数:
水仙花数只是自幂数的一种,也被称为(超完全数字不变数)水仙花数是指一个 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个:548834;
=====================================================================
等等,对于这些水仙花数的名称我们无需了解,只要知道是什么原理就可以,无非就是对于几位数的每一位上的自身几次幂之和等于本身(例如五位数,每一位进行五次幂之后再相加得出的结果会等于这个五位数,就符合条件),就属于水仙花数。
废话不多说,接下来分析如何通过代码如何实现输出水仙花数。
如果单单打印所有的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();
}
}
其中判断条件可以利用Java内的Math类进行以某一位数为底数,以一共几位数为指数的幂值,例如163-------Math.pow(1,3)+Math.pow(6,3)+Math(3,3);
=====================================================================
Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
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到999999为例的水仙花数(0不为水仙花数),先在循环内写一个判断位数的代码。
while(j!=0){
ret++;
j/=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();
}
}
相关知识
java基础判断一个数是不是水仙花数
C语言:输出所有的水仙花数
通过Java实现求水仙花数
JavaScript写打印水仙花数(三位数),(153=1*1*1+5*5*5+3*3*3)每位数字的立方和等于等于该数即水仙花数,打印出所有水仙花数。
hdu 2010 水仙花数
求出100~999之间的所有“水仙花数”并输出。
c语言输出水仙花数
C语言实现水仙花数
python输出1到1000内的水仙花数
每日经典算法题(三) 求水仙花数
网址: 超简单地输出所有水仙花数(Java实现) https://m.huajiangbk.com/newsview1551329.html
上一篇: 象征勇敢热烈的花 |
下一篇: 简单绘画(1)之水仙花 |