1W以内整数阶乘。
能实现1W以内整数阶乘,并以50位一行输出,代码未优化,时间为5秒以内。#include<math.h>
#include<stdio.h>
void main()
{
int a[6000]={0},c[6000]={0},d[6000]={0},b[2];
int n,i,m,h,e,k,x,y=0;
a[0]=1;
int g=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
h=0,e=0,k=0;
b[0]=i%10;
d[0]=0;
b[1]=(i-i%10)/10;
for(m=0;m<5999;m++)
{
c[m]=(a[m]*b[0]+h)%10;
h=(a[m]*b[0]+h-(a[m]*b[0]+h)%10)/10;
d[m+1]=(a[m]*b[1]+e)%10;
e=(a[m]*b[1]+e-(a[m]*b[1]+e)%10)/10;
a[m]=(c[m]+d[m]+k)%10;
k=(c[m]+d[m]+k-(c[m]+d[m]+k)%10)/10;
}
}
m=5999;
h=1,k=0;
while(m>=0)
{
if(a[m]==0)
{
while(h){
m--;
if(a[m]>0)
{
h=0;
x=m;
if((x+1)%50==0)
{
e=1;
}
else
{
y=50-(x+1)%50;
while(y>=1)
{
printf("0");
y--;
k++;
}
}
}
}
}
printf("%d",a[m]);
k++;
if(k%50==0)
printf("\n");
m--;
}
}