描述
求10000以内n的阶乘。
输入
只有一行输入,整数n(0<=n<=10000)。
输出
一行,即n!的值。
样例输入
100
样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int jie[10000]= {0};
int j=0,i=0,k=1;//k代表有多少位需要进行乘积运算
int n;
jie[0]=1;
scanf("%d",&n);
for (j=1; j<=n; j++)
{
for (i=0; i<k; i++)
{
jie[i]=jie[i]*j;
}
for (i=0; i<k; i++)//这层循环使得jie数组每个数都是个一位数
{
jie[i+1]=jie[i+1]+jie[i]/10;
jie[i]%=10;
}
if (jie[i]>0)
{
while (jie[i]>=10)//判断最高位,进行进位
{
jie[i+1]=jie[i+1]+jie[i]/10;
jie[i]%=10;
i++;
}
k=i+1;//i当前的值可表示为求完一轮阶乘的位数,将i传递给k!
}//由于i是从0开始,而k是代表所需要乘的位的次数数,所以是i+1.
}
for (j=k-1; j>=0; j--)
{
printf("%d",jie[j]);
}
return 0;
}