#include static unsigned int FACT_TABLE[] = { 1, // 0 1, // 1 2, // 2 6, // 3 24, // 4 120, // 5 720, // 6 5040, // 7 40320, // 8 362880, // 9 3628800, // 10 39916800, // 11 479001600, // 12 }; unsigned long long fact(unsigned int num) { if (num < 13) { return FACT_TABLE[num]; } unsigned long long l = FACT_TABLE[12]; for (unsigned int i = 12; i < num;) { i++; l *= i; } return l; }