Project Euler 20 Factorial digit sum( 大数乘法 )


题意:求出100!的各位数字和。


/*************************************************************************
    > File Name: euler020.c
    > Author:    WArobot 
    > Blog:      http://www.cnblogs.com/WArobot/ 
    > Created Time: 2017年06月28日 星期三 11时46分46秒
 ************************************************************************/

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

#define D_VALUE 1000
int32_t main() {
	int32_t ans[2001] = {0};		
	ans[1] = ans[0] = 1;	
	for (int32_t i = 1 ; i <= 100 ; i++) {
		for (int32_t j = 1 ; j <= ans[0] ; j++) {
			ans[j] *= i;
		}
		for (int32_t j = 1 ; j <= ans[0] ; j++) {
			if (ans[j] < D_VALUE)	continue;
			ans[j + 1] += ans[j] / D_VALUE;
			ans[j] %= D_VALUE;
			if (ans[0] == j)	ans[0]++;
		}
	}
	int32_t sum = 0;
	for (int32_t i = 1 ; i <= ans[0] ; i++) {
		while (ans[i]) {
			sum += ans[i] % 10;
			ans[i] /= 10;
		}
	}
	printf("%d\n",sum);
	return 0;
}
posted @ 2017-06-28 12:03  ojnQ  阅读(209)  评论(0编辑  收藏  举报