/* * factorials. */ #include #include #include int ans [205], tmp [205]; void fact (int N); void mult (int num); void copy (void); int main (void) { int i, N, j; char s [100]; while (gets (s) != NULL) { sscanf (s, "%d", &N); for (i = 0;i < 205; i++) ans [i] = tmp [i] = 0; ans [0] = 1; fact (N); j = 0; for (i = 204; i>= 0; i--) { if (!j && ans [i] != 0) j = 1; if (j) printf ("%d", ans [i]); } printf ("\n"); } return 0; } void fact (int N) { int i; for (i = 0; i < N; i++) { mult (i + 1); } } void mult (int num) { int i, c, dig, foo, j, start, k; start = 0; while (num) { j = start; dig = num % 10; num /= 10; c = 0; for (i = 0; i < 205; i++) { foo = ans [i]; foo = foo * dig + c; tmp [j] = foo % 10 + tmp [j]; k = j + 1; while ((tmp [k - 1] % 10) != tmp [k - 1]) { tmp [k] += (tmp [k - 1] / 10); tmp [k - 1] %= 10; k++; } c = foo / 10; j++; } start++; } copy (); } void copy (void) { int i; for (i = 0; i < 205; i++) { ans [i] = tmp [i]; tmp [i] = 0; } }