import java.util.ArrayList;

public class Daffodil {

/**
* 打印出100-999之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
* 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

//第二种
// ArrayList list = getAllDaffodil();
// System.out.println(" 1000以内的水仙花数字分别是 " + list + " 总数为 " +
// list.size());

//第一种
for (int i = 101; i < 1000; i++) {
if (isDaffodil(i))
System.out.println(i + " 是一个水仙花数字 \n");
}

// System.out.println(126%100/10);
}

/**
*
* @return ArrayList 返回所有水仙花的数组集合
*/
private static ArrayList getAllDaffodil() {
double m;
double n;
double i, j, k, temp = 10;
ArrayList list = new ArrayList();
for (i = 1; i < temp; i++) {// 百位
for (j = 0; j < temp; j++) {// 十位
for (k = 0; k < temp; k++) {// 个位
// Returns the closest double approximation of the result of
// raising
m = Math.pow(i, 3) + Math.pow(j, 3) + Math.pow(k, 3);
n = i * 100 + j * 10 + k;
// System.out.println(" i = " + i + " n = " + n + " m = " +
// m);
if (m == n) {
list.add((int) n);
}
}
}
}
return list;
}

/**
*
* @param n 传入一个数字进行判断
* @return 是水仙花数字返回 true 不是返回false
*/
private static boolean isDaffodil(int n) {
int bai, shi, ge;
double temp;
if (n <= 100 || n > 999)
return false;
ge = n % 10; // 三位数对10取余数 即可得到个位数字
shi = n % 100 / 10;// 三位数对100取余数 即可得到后两位数字,再除以10,可以得到十位上的数字
bai = n / 100; //处以100的百位数字
temp = (Math.pow((double)ge, 3) + Math.pow((double)shi, 3) + Math.pow((double)bai, 3));
// System.out.println("n = " + n +" " + bai+" "+shi+" "+ge+" "+ " temp = " + temp);
if (n == temp) {
return true;
}

return false;
}

}