N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34699 Accepted Submission(s): 9717
Problem Description
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
//解题思路:主要是解决超时问题,我用去对数的方法测了大概需要40000位,但是如何解决这个问题,我没处理好,最后参考别人的思路,真的很好,尤其最后输出的解决方法,真的很赞:参考代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define N 8000
int a[N];
int main(){
int n;
while(scanf("%d",&n)!=EOF)
{ int i,j,k,t;
memset(a,0,sizeof(a));
a[0]=1;
for(i=2;i<=n;i++)
{ for(t=0,j=0;j<N;j++)
{ k=a[j]*i+t;
a[j]=k%100000;
t=k/100000;
}
}
for(i=N-1;!a[i];i--);
printf("%d",a[i]);//前面的零不能要
while(i)
printf("%05d",a[--i]);//后面的零要输出
printf("\n");
}
return 0;
}