void main()
{
int n; //要计算阶乘的n
int bit=29999; //个位所在位置
int i=1; //从1开始做乘法
int result[30000]={0}; //保留结果数组,用3万位
int carry=0; //某位与n相乘后的进位
long tmp; //某位与n相乘后的结果临时保存
long t_bit=29999; //上一次相乘后的最高位
scanf("%d",&n); //输入n
result[29999]=1; //个位初始为1
while(i<=n) //从1--n开始计算
{
while(carry!=0||bit>=t_bit) //如果上一次相乘没有进位,且已经乘完最高位,则此相乘结束
{
tmp=result[bit]*i+carry; //某一位与n相乘加上进位
result[bit]=tmp%10; //当前位为结果与10取模
carry=tmp/10; //进位为当前结果除10
bit--; //向更高位计算
}
t_bit=bit+1; //t_bit为上次结果的最高位
i++;
bit=29999; //下次相乘仍从个位开始
}
for(int j=t_bit;j<30000;j++) //打印结果
printf("%d",result[j]);
}