HDU---1042
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 65926 Accepted Submission(s): 18907
1 2 3
1 2 6
核心思想:将其核心思想就是把计算结果每一位上的数字保存到一个数组成员中,10000的阶乘,最后结果长度是35660位,所以数组开到40000位就行了。把整个数组看成一个数字,这个数字和一个数相乘的时候,需要每一位都和这个乘数进行相乘运算还需要把前一位的进位加上。
代码如下:
#include<stdio.h> #include<string.h> int a[40000]; int main() { int n; int y,z; int p,i,v,k;//p表示进位; while(scanf("%d",&n)!=EOF) { p=0; memset(a,0,sizeof(a)); a[0]=1;k=1; for(v=1;v<=n;v++) { for(i=0;i<k;i++)//k表示计算计算到第几位 { a[i]=a[i]*v+p; p=a[i]/10; a[i]=a[i]%10; } while(p) { a[k]=p%10; p=p/10; k++; } } for(i=k-1;i>=0;i--) printf("%d",a[i]); printf("\n"); } return 0; }