#include <iostream>using namespace std;unsigned LastNotZeroDigit[1000];long long Factorial[100];unsigned CleanLastZeros(unsigned num);//清除數字後面的0unsigned GetLastNotZeroDigit(unsigned num);//擷取數位最後一位非零數字unsigned GetLastNotZeroDigitOfFactorial(unsigned n);//擷取n!的最後一位非零數字long long GetFactorial(unsigned n);//計算n!int main(int argc, char* argv[]){for(unsigned i=0; i<20; i++){cout<<i<<" "<<GetFactorial(i)<<" "<<GetLastNotZeroDigitOfFactorial(i)<<endl;}getchar();return 0;}unsigned CleanLastZeros(unsigned num){int tmpNum = num;for(int i=0; i<num; i++){if(tmpNum%10 == 0){tmpNum /= 10;}else{break;}}return tmpNum;}unsigned GetLastNotZeroDigit(unsigned num){num = CleanLastZeros(num);num %= 10;return num;}unsigned GetLastNotZeroDigitOfFactorial(unsigned n){if(n == 0){LastNotZeroDigit[0] = 1;}else if(n == 1){LastNotZeroDigit[1] = 1;}else{LastNotZeroDigit[n] = GetLastNotZeroDigit(n * GetLastNotZeroDigitOfFactorial(n - 1) );}return LastNotZeroDigit[n];}long long GetFactorial(unsigned n){if(n == 0){Factorial[0] = 1;}else if(n == 1){Factorial[1] = 1;}else{Factorial[n] = n * GetFactorial(n - 1);}return Factorial[n];}