题目:
打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
例如: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();
}
}