Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1
2
3
Sample Output
1
2
6
题目的意思是让你求输入的数的阶乘,题目虽然很简单,但是由于数据太大,开个10005的数组预处理每一个数组的预处理明显不行,所以这道题用大数相乘依次求阶乘
我的思想:开个足够大的数组,每一个数组存一个各位数,代表阶乘的每一位数,我们知道15*20的值就等于10*20+20*5的值,所以我们可以给数组为下标为0的赋值为5,下标为1的赋值为1,分别乘以20,然后取余,进位。
代码如下:
#include <stdio.h>
#include <string.h>
int a[50005];
int k;
int main()
{
int t,i,j;
while(scanf("%d",&t)!=EOF)
{
memset(a,0,sizeof(a));
if(t==0||t==1)
printf("1\n");
else
{
k=1;
a[0]=1;
int jishu=0;
for(i=2;i<=t;i++)
{
for(j=0;j<k;j++)
{
a[j]=i*a[j]+jishu%10;
jishu=a[j]/10+jishu/10;
a[j]=a[j]%10;
}
while(jishu!=0)
{
a[j++]=jishu%10;
jishu/=10;
k++;
}
}
for(i=k-1;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
}
return 0;
}