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
刘聪 阅读(156)
评论(0) 编辑 收藏 引用