Project Euler 34 Digit factorials


题意:判断一个数 N 的各个位数阶乘之和是否为其本身,找出所有符合要求的数然后求和

思路:此题思路跟 30 题相同,找到枚举上界 10 ^ n <= 9! × n ,符合要求的 n < 6 ,因此选择 9! × 6 作为上界


/*************************************************************************
    > File Name: euler034.c
    > Author:    WArobot 
    > Blog:      http://www.cnblogs.com/WArobot/ 
    > Created Time: 2017年06月23日 星期五 13时52分58秒
 ************************************************************************/

#include <stdio.h>
#include <inttypes.h>

#define MAX_N 2177280
int32_t fac[10];

void init_fac(){
	fac[0] = 1;	
	for(int32_t i = 1 ; i < 10 ; i++)	fac[i] = fac[i-1] * i;
}

bool isNumber(int32_t n){
	int32_t sum = 0 , x = n;
	while(x){
		sum += fac[ x % 10 ];
		x /= 10;
	}
	return sum == n;
}

int32_t main(){
	int32_t sum = 0;
	init_fac();
	for(int32_t i = 3 ; i <= MAX_N ; i++){
		if( isNumber(i) )	sum += i;
	}
	printf("%d\n",sum);
	return 0;
}
posted @ 2017-06-23 14:09  ojnQ  阅读(210)  评论(0编辑  收藏  举报