【练习题】HDU 2212 DFS
求 [1, 2147483647] 内所有,每位上的数字的阶乘和等于本身的数,如:145 = 1!+4!+5!
最近手生找点题做,上来有点蒙,简单题暴力解应该就行,但是需要理清思路
- 直接暴力数字很大肯定爆掉
- 1~9的阶乘,提前算好存一下
- 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);
}
}
}
}