#include <iostream>
using namespace std;
unsigned LastNotZeroDigit[1000];
long long Factorial[100];
unsigned CleanLastZeros(unsigned num); //清除数字后面的0
unsigned 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];
}
获取阶乘n!的最后一个非零数字
最新推荐文章于 2021-08-10 16:01:06 发布