UVA 623 [big numebr]

来源:互联网 发布:手机编程有什么输入法 编辑:程序博客网 时间:2024/04/29 06:08

Thinking : In initialization, we will compute the factorial from 0! to 1000!. Or we will get TLE.

ps: don't forget 0!


AC code:

#include<iostream>#include<cstring>using namespace std;int bit[1001][8];int factorial[1001][3000];void init(){for (int i = 1; i <= 1000; i++)bit[i][0] = 0;int t;for (int i = 1; i <= 1000; i++){t = i;while (t != 0){bit[i][++bit[i][0]] = t % 10;t /= 10;}}memset(factorial, 0, sizeof(factorial));factorial[1][0] = 1;factorial[1][1] = 1;for (int i = 2; i <= 1000; i++){int j = i - 1;for (int a = 1; a <= bit[i][0]; a++)for (int b = 1; b <= factorial[j][0]; b++){factorial[i][a + b - 1] += bit[i][a] * factorial[j][b];}factorial[i][0] = bit[i][0] + factorial[j][0]-1;int flag = 0;for (int s = 1; s <= factorial[i][0]; s++){factorial[i][s] += flag;flag = factorial[i][s] / 10;factorial[i][s] %= 10;}while (flag){factorial[i][++factorial[i][0]] = flag % 10;flag /= 10;}}}int main(){int N;init();while (scanf("%d", &N) != EOF){printf("%d!\n", N);if (N == 0){printf("1\n");continue;}for (int i = factorial[N][0]; i >= 1; i--)printf("%d", factorial[N][i]);printf("\n");}return 0;}


1 0
原创粉丝点击