一直很纠结自己不会计算大数阶乘。纠结了好久终于自己写出来了一个,算是独立写的一个吧。虽然当计算特别大的数的时候,比较耗时间,但这是自己写的,应该记一下,以后会进行优化一下的。
大数阶乘
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define maxn 10000+10
int v[maxn];
int main()
{
memset(v,0,sizeof(v));
int m;
scanf("%d",&m);
int k;
k=m;
int p=0;//先把输入的数处理一下,存进数组里面
while(k>0)
{
v[p]=k%10;
k=k/10;
p++;
}
int i,j; //基本的核心就是,每乘以一个数,就对数组处理一下。
for(i=m-1;i>0; i--)
{
for(j=0;j<maxn; j++)
{
v[j]=v[j]*i;
}
int lp;
for(lp=0;lp<maxn; lp++)
{
if(v[lp]>=10)
{
v[lp+1]=v[lp+1]+v[lp]/10;
v[lp]%=10;
}
}
}
int t;
for(t=maxn;t>0; t--)
{
if(v[t]!=0)break;
}
for(i=t;i>=0; i--)
printf("%d",v[i]);
printf("\n");
return 0;
}