对于10以内的数字,求它的阶乘,可以存储在整型或者长整型类型中,但是如果大于10的数字,求它的阶乘,例如:20!位数高达19位,这就不能直接存储了,必须采用灵活的方法来处理,比较大的数的阶乘。
#include<iostream>
using namespace std;
#define max 300
void CalcNN(int n, char *pOut)
{
int i_out=0;
if(n<0)
{
pOut[0]='\0';
return;
}
if(n==0||n==1)
{
pOut[i_out++]='1';
pOut[i_out]='\0';
return;
}
int bit[max]={0};
bit[0]=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<max;j++)
{
bit[j]=bit[j]*i;//对每一位相乘
}
for(int j=0;j<max;j++)
{
if(bit[j]>9)//进位
{
for(int k=j;k<max&&bit[k]>9;k++)
{
bit[k+1]+=bit[k]/10;
bit[k]=bit[k]%10;
}
}
}
}
int len=max-1,count=0;
while(bit[len]==0)
{
len--;//得到bit总位数
}
count=len;
for(int i=count;i>=0;i--)//
{
pOut[i_out++]=bit[i]+'0';
}
pOut[i_out]='\0';
return;
}
int main()
{
char str[max]={0};
int n;
cin>>n;
CalcNN(n,str);
puts(str);
system("pause");
return 0;
}
运行结果: