这是JAVA基础系列的第一篇,就从简单的水仙花数开始吧!
什么是水仙花数呢?这里引用下百度百科里面的定义吧!
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
既然如此,我们也就知道了水仙花数的取值范围:100-999
这是一个连续递增的范围,那么也就是使用循环来完成即可,常用的就是for循环了,当然使用while和do-while 其实也是没有问题的,甚至你可以用递归!
那么剩下的问题就是怎么计算的问题,计算前我们需要取出个位,十位和百位上的数字,以153为例,个位呢相对简单,153除以10的余数就是了,那么十位呢?可以先除以10在取余:153/10 = 15,15除以10的余数就是十位,百位就是直接除以100就可以了,是100的几倍就是几,接下来,写代码:
/**
* 判断水仙花数
*
* @param num 一个3位数
* @return
*/
public static boolean isNarcissisticNumber(int num) {
// 位数校验,一般不需要做
if (num < 100 || num > 999) {
return false;
}
int onesPlace = num % 10;
int tenPlace = num / 10 % 10;
int hundredsPlace = num / 100;
int result = onesPlace * onesPlace * onesPlace
+ tenPlace * tenPlace * tenPlace
+ hundredsPlace * hundredsPlace * hundredsPlace;
// 如果得到的数等于原来的数,则这个数是水仙花数
return result == num;
}
测试方法
public static void main(String[] args) {
for (int i = 100; i <= 999; i++) {
if (isNarcissisticNumber(i)) {
System.out.println(i);
}
}
}
输出的结果有:153、370、371、407
扩展延伸
水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。
附:其他位数的自幂数名字
一位自幂数:独身数
两位自幂数:没有
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数
我们也可以通过分解的方式去计算其他的自幂数