#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void calculate(int a[] , const int num ); //计算每一步的阶乘
int len = 1;
int main(void)
{
int *a;
int n = 0;
while(n>10000 ||n < 1000)
{
printf("please input number n between 1000 and 10000: ");
scanf("%d",&n);
}
a = (int *)malloc(sizeof(int)*n*4);
if(a == NULL)
{
exit(-1);
}
memset(a,0,n);
a[0] = 1 ;
for(int i = 1 ; i <= n ; i++) //通过数组计算n!
{
calculate(a , i ) ;
}
int count = 0;
while(a[count] == 0)
{
count++;
}//统计个数零
printf("the result is : %d\n",count);
return 0;
}
void calculate(int a[] , const int num )
{
int result = 0; // 乘积结果
int remainder = 0 ; // 余数
int carry = 0; // 进位
for(int i = 0 ; i < len ; ++i)
{
result = a[i]*num + carry;
a[i] = result%10;
carry = result/10;
}
if(carry!=0) //如果进位不为零,从低位到高位依次存储
{
while(carry/10 != 0)
{
a[len] = carry%10;
carry = carry/10;
len++;
}
a[len++] = carry;
}
}