您的位置:首页 > 其它

获取阶乘n!的最后一个非零数字

2012-07-24 14:13 183 查看
#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
= GetLastNotZeroDigit(n * GetLastNotZeroDigitOfFactorial(n - 1) );
}
return LastNotZeroDigit
;
}

long long GetFactorial(unsigned n)
{
if(n == 0)
{
Factorial[0] = 1;
}
else if(n == 1)
{
Factorial[1] = 1;
}
else
{
Factorial
= n * GetFactorial(n - 1);
}
return Factorial
;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: