杭电acm1042
http://acm.hdu.edu.cn/showproblem.php?pid=1042
这题很有难度,对现在的自己而言。。。。因为比较大的数的阶乘结果即使longlong也是存不下的,所以用数组来做,可以每个位上存1位或者多位,先总的每个位上的元素乘上要计算的那个数,然后依次取模和进位,存储及进位到下一位。。。得到结果
View Code
1 #include<stdio.h> 2 int main() 3 { 4 int n,m,i,j,b; 5 long a[100000]; 6 while(scanf("%d",&n)!=EOF) 7 { 8 9 a[0]=1; 10 m=1; 11 for(i=1;i<=n;i++) 12 { 13 b=0; 14 for(j=0;j<m;j++) 15 { 16 a[j]=a[j]*i+b; 17 b=a[j]/10000; 18 a[j]=a[j]%10000;// 这里一个位上存储4位数,节省空间 ,相对的如果改成10,就是存一位了 19 } 20 if(b>0) 21 { 22 a[m]=b; 23 m++; 24 } 25 } 26 printf("%ld",a[m-1]);//因为下面的输出模式 ,所以这边先把可能不满4位的输出 27 for(i=m-2;i>=0;i--) 28 { 29 printf("%4.4ld",a[i]);// 30 } 31 printf("\n"); 32 } 33 return 0; 34 }