题目:

打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。

例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。


代码:

很简单,写一个方法判断某个3位数是否为水仙花数,然后外面从100到999循环,依次调用判断方法,满足的则打印出当前数。


package com.charles.algo;
/**
 * @author charles.wang
 * 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
 * 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
 */
public class ShuiXianHuaNumber {
           
           
    private ShuiXianHuaNumber(){}
           
    /**
     * 打印所有的水仙花数
     */
    public static void printAllShuiXianHuaNumber(){
               
        for(int i=100;i<=999;i++){
            if(isShuiXianHuaNumber(i))
                System.out.print(i + " ");
        }
    }
           
    /**
     * 判断一个数是否为水仙花数,判断依据在题目中已经给出
     * @param number
     * @return
     */
    private static boolean isShuiXianHuaNumber(int number){
               
        //因为水仙花数必须是3位数,所以判断是否在区间 [100,999]之间
        if( (number<100)  || (number>999))
            return false;
               
        //获取水仙花数的百位数字
        int baiWei = number / 100;
        int removeBaiWeiRemaining = number - baiWei *100;
               
        //获取水仙花数的十位数字
        int shiWei = removeBaiWeiRemaining / 10;
               
        //获取水仙花数的个位数字
        int geWei  = removeBaiWeiRemaining - shiWei *10;
               
        //计算是否为水仙花数
        if ( Math.abs(   Math.pow(baiWei, 3L)+ Math.pow(shiWei, 3L)+ Math.pow(geWei, 3L) - number)<=0.999)
            return true;
               
        return false;
    }
           
    /**
     * @param args
     */
    public static void main(String[] args) {
               
        printAllShuiXianHuaNumber();
    }
           
           
}