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; } }