该博客专为小白提供,如是有基础可跳过中间部分,之间观看最后部分(中间废话我都觉得多了点
)
一、首先,我们要了解水仙花数是一个什么概念的数。
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。 例如:1*1*1 + 5*5*5+ 3*3*3 = 153。
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477;
九位的九九重阳数共有4个: 146511208,472335975,534494836,912985153;
十位的自幂数只有1个:4679307774
二、那么,我们该怎么用java形式的思路解出水仙花数呢?
首先我们要清楚了解水仙花数的格式,例如三位数水仙花:153、370、371、407
这里我将使用for循环讲解如何解题。
for循环的格式
for (int i=1;i<=5;i++){
/*int i=1为定义初始体
i<=5是该循环终止的条件,也就是当i循环到小于或等于5的时候停止循环
i++为更新*/
}//注意:for关键字后面括号中的3个条件表达式必须用 ;(分号) 隔开
这里我将讲解三位数水仙花的思路。
1、我们要求三位的水仙花数,那取值区间将在100-10000之间,但并不包括10000,所以些第二个表达式时应留意。 for循环的初始表达式应该写为100,终止表达式为<10000。这样我们就确定了取值区间。代码如下:
for (int i=100;i<1000;i++){
//功能代码
}
2、 在for循环中我们要写输出条件。也就是i循环到某个数时判定该数是不是水仙花数,我们该如何判定某个数是不是水仙花数,这就要回顾水仙花的格式了。例如(这里我将使用字母形式):i=a*a*a+b*b*b+c*c*c
算数运算符都包括:加(+)、减(-)、乘(*)、除(/)、取模(%)、自增(++)、自减(–)、字符串连接符(+)
这里我们将用到运算符 / 和 %
//以第一个水仙花数153为例
/*提取个位数*/int a=i%10;//153%10=15.30,取余数3
/*提取十位数*/int b=i/10%10;//153除以10=15.3,15.3%10取余数5
/*提取百位数*/int c=i/100%10;//153除以100=1.53,1.53%10取余数1
3、然后就是选择条件。
这里我们将用到if判断
//if else语句语法
if(条件表达式){
//功能代码1
}else{
//功能代码2
}
我们将写出水仙花的提取条件i=a*a*a+b*b*b+c*c*c(只是格式,和以下代码并无关联),所以在判断条件里就只用写:水仙花数=百位*百位*百位+十位*十位*十位+个位*个位*个位
在功能代码区写输出即可
if (a*a*a+b*b*b+c*c*c==i){
System.out.println(+i+" 是水仙花数");
}
好了,教程到此结束,放上整段代码,仅供参考
package com.sanmu;
public class shuixianhuashu {
public static void main(String args[]){
for (int i=100;i<1000;i++){
int a=i%10;
int b=i/10%10;
int c=i/100%10;
if (a*a*a+b*b*b+c*c*c==i){
System.out.println(i+"="+c+"*"+c+"*"+c+"+"+b+"*"+b+"*"+b+"+"+a+"*"+a+"*"+a+ " ,他是水仙花数");
}
}
}
}