杭电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  }

 

posted @ 2013-03-30 19:05  执着追求的IT小小鸟  阅读(268)  评论(0编辑  收藏  举报