题目:
打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
代码:
很简单,写一个方法判断某个3位数是否为水仙花数,然后外面从100到999循环,依次调用判断方法,满足的则打印出当前数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
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();
}
}
|
本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1345604,如需转载请自行联系原作者