145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.
Find the sum of all numbers which are equal to the sum of the factorial of their digits.
Note: as 1! = 1 and 2! = 2 are not sums they are not included.
145是一个奇怪的数字,为1!+ 4!+ 5!= 1 + 24 + 120 = 145。
求所有数字的总和等于其数字的阶乘之和。
注意:为1!= 1和2!= 2不是它们不包括在内的总和。
思路
1.估算上界,与二十八题一样,我们需要通过f(n) = 10的n次方,g(n) = 9!*n来估算上界 得到n的值为7,
2.求阶乘,实际上只需算出0-9的阶乘即可,于是我们开一个大小为10的数组,这样在计算阶乘时就方便很多
#include <stdio.h>
#define max 2540160
int Iscurious(int num, int *mul){
int store = num, sum = 0;
while(num){
sum += mul[num % 10];
num /= 10;
}
return store == sum;
}
int main(){
int mul[10] = {0};
mul[0] = 1;
for(int i = 1; i < 10; i++){
mul[i] = mul[i - 1] * i;
}
int sum = 0;
for(int i = 3; i < max; i++){
if(Iscurious(i, mul)) sum += i;
}
printf("%d\n",sum);
return 0;
}