#include"stdio.h"
#define N 10000
int a[N]={0};
int b[N]={0};
int fac(int ,int,int );
int main()
{
int i;
int temp,temp1;
int n,m;
a[0]=1;
printf("please input a number:\n");
scanf("%d",&n);
m=2;
temp1=1;
fac(n,m,temp1);
for(i=N;a[i]==0;i--)
temp=i;
for(i=temp-1;i>=0;i--)
printf("%d",a[i]);
return 0;
}
int fac(int n,int m,int temp2)
{
int i,j,k,temp,temp1,flag;
for(i=temp2+10;a[i]==0;i--)
temp=i;
for(i=0;i<temp || flag==1;i++)
{
flag=0;
temp1=a[i]*m;
if((b[i]+temp1%10)>9)
{
b[i+1]=b[i+1]+(b[i]+temp1%10)/10;
}
a[i]=(b[i]+temp1%10)%10;
if(temp1>9) //对进位数组进行分析
{
for(j=i;temp1>0;j++)
{
temp1=temp1/10;
b[j+1]=b[j+1]+temp1%10;
}
for(k=i+1;k<=j+1;k++) //对进位的进位进行处理
{
b[k+1]=b[k+1]+b[k]/10;
b[k]=b[k]%10;
}
}
for(j=2*temp2;b[j]==0;j--); //判断进位数组剩下的进位数是否为零
if(j>i)
{
flag=1;
}
}
temp2=i;
for(i=0;i<=j;i++)
b[i]=0;
if(m<n)
return fac(n,++m,temp2);
return 0;
}
大数的阶乘
最新推荐文章于 2021-11-30 09:00:20 发布