题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
package com.oz.algorithm;
import java.util.*;
public class MyMath{
/*
* this function returns a list of Narcissutic Numbers
*/
public static List<Short> getNarcissutic(){
List<Short> narcissuList = new ArrayList<>();
short number = 100;
//add narcissu to the list
for(;number<=999;number++){
if( isNarcissutic(number) )
narcissuList.add(number);
}
return narcissuList;
}
/*
* check if a number is a Narcissutic Number
*/
public static boolean isNarcissutic(short number){
short hundreds = (short)(number / 100);
short tens = (short)((number - hundreds * 100) / 10 ); // or (short)(number%100)/10
short ones = (short)(number - hundreds * 100 - tens * 10); // or (short)(number%10)
short sum = (short)(Math.pow(hundreds,3) +
Math.pow(tens,3) + Math.pow(ones,3));
//return true if the number is a narcissu
if(sum == number)
return true;
else
return false;
}
}
测试:
package com.oz;
import com.oz.algorithm.*;
public class Test1{
public static void main(String[] args){
System.out.print(MyMath.getNarcissutic());
}
}
输出:
[153, 370, 371, 407]
附录:常见自幂数
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477
附录摘自百度百科