2009年3月13日 星期五

Q10220: I Love Big Numbers !

/*
也可以和 Q623: 500! 一樣用二維的ARRAY
但這題只要SUM不要階層的值
所以 arr 可以一直用

如果用二維會太浪費空間

Run time: 0.030
*/
#include <stdio.h>
#define LEN 2600
#define N 1000

int arr[LEN];
int len[N+1];
void calculate();

int main()
{
int n;
int i;
int sum;
calculate();

while (scanf("%d", &n) != EOF)
{
printf("%d\n", len[n]);
}

return 0;
}

void calculate()
{
int i, j;

arr[0] = 1;
len[0] = 1, len[1] = 1;

for ( i = 1; i <= N; i++)
{
for ( j = 0; j < LEN; j++)
arr[j] *= i;

for ( j = 0; j < LEN; j++)
{
// to calculate carry
if (arr[j] >= 10)
{
arr[j+1] += arr[j]/10;
arr[j] %= 10;
}
}

for ( j = 0; j < LEN; j++)
len[i] += arr[j];
}
}

沒有留言: