posts - 17,  comments - 0,  trackbacks - 0
 1 #include <cstdlib>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     long long a[20000],carry,i;
 9     int n,j;    
10     
11     while(cin>>n)
12     {
13            
14         if(n==0)
15         cout<<1<<endl;
16         else
17         {    
18             memset(a,0,sizeof(a));
19             for(i=1;i<=n;i++)
20             {
21                 carry=0;
22                 if(i==1)
23                 {    
24                     a[0]=1;a[1]=1;
25                 }
26                 else
27                 {
28                    for(j=1;j<=a[0];j++
29                    {
30                         a[j]=i*a[j]+carry;
31                         carry = a[j]/10;
32                         a[j]=a[j]%10;                
33                    }
34                    
35 /*处理最后一位的进位,我开始写为如下的形式,这种形式有严重的问题,如果N特别大,carry就有可能不是一位数,我试了了下,最大只能处理49的阶乘,遇到50的阶乘就会出错。 
36                    if(carry)
37                     {
38                         a[0]++;
39                          a[j]=carry;
40                      }                     
41 因为以上处理进位的方式不行,所以改为如下的处理进位的方式。*/
42                    
43                    while(carry)
44                     {
45                         a[0]++;
46                         a[j]=carry%10;
47                         carry/=10;
48                         j++;
49                     }                    
50                     
51                 }
52             }
53             for(i=a[0];i>0;i--)
54                 cout<<a[i];
55             cout<<endl;
56         }
57     }
58     
59     system("PAUSE");
60     return EXIT_SUCCESS;
61 }
62 
posted on 2011-10-31 19:37 刘聪 阅读(62) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理