daffodil





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 + " 是一个水仙花数字  
");
		}
		
//		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;
	}

}







原文地址:https://www.cnblogs.com/flyingsir/p/3983724.html