【练习题】HDU 2212 DFS

求 [1, 2147483647] 内所有,每位上的数字的阶乘和等于本身的数,如:145 = 1!+4!+5!

最近手生找点题做,上来有点蒙,简单题暴力解应该就行,但是需要理清思路

  1. 直接暴力数字很大肯定爆掉
  2. 1~9的阶乘,提前算好存一下
  3. 9的阶乘362880,9999999999的阶乘和为3628800,所以可以考虑缩减暴力范围
    (这点其实应该在第一次写完看到答案之后发现,解只有4个,都很小)
/**
 * HDU 2212 DFS
 * 注:杭电Java提交需要类名改为Main
 */
class DFSNumber {

	/*阶乘*/
	public static int factorial (int num) {
		int result = 1;
		while(num > 0) {
			result *= num;
			num--;
		};
		return result;
	}

	/*各一位数的阶乘*/
	public static int[] singleFactorial() {
		int num = 0;
		int[] factorials = new int[10];
		while (num < 10) {
			factorials[num] = factorial(num);
			num++;
		}
		return factorials;
	}

	public static void main(String[] args) {
		int[] factorials = new int[10];	//各一位数的阶乘
		factorials = singleFactorial();

		int n, sum;
		for (int i = 1; i < 9999999; i++) {
			n = i;
			sum = 0;
			while (n > 0) {
				sum += factorials[n%10];
				n /= 10;
			}
			if (sum == i) {
				System.out.println(i);
			}
		}
	}
}

posted on 2017-07-03 09:41  0Kelvin  阅读(197)  评论(0编辑  收藏  举报

导航