openjudge 14:求10000以内n的阶乘

14:求10000以内n的阶乘

总时间限制:
5000ms
内存限制:
655360kB
描述

求10000以内n的阶乘。

输入
只有一行输入,整数n(0<=n<=10000)。
输出
一行,即n!的值。
样例输入
100
样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915。。。。

 1 #include <algorithm>   
 2 #include <bitset>     
 3 #include <cctype>
 4 #include <cerrno>
 5 #include <clocale>
 6 #include <cmath>
 7 #include <complex>    
 8 #include <cstdio>
 9 #include <cstdlib>
10 #include <cstring>
11 #include <ctime>
12 #include <deque>     
13 #include <exception>   
14 #include <fstream>
15 #include <functional>   
16 #include <limits>
17 #include <list>      
18 #include <map>      
19 #include <iomanip>
20 #include <ios>      
21 #include <iosfwd>     
22 #include <iostream>
23 #include <istream>    
24 #include <ostream>    
25 #include <queue>     
26 #include <set>      
27 #include <sstream>    
28 #include <stack>        
29 #include <stdexcept>   
30 #include <streambuf>   
31 #include <string>     
32 #include <utility>    
33 #include <vector>    
34 #include <cwchar>
35 #include <cwctype>
36 using namespace std;
37 int a[100000010];
38 char c [60];
39 int main() {
40 //从1乘到n
41     int i,len,n;
42     scanf("%d",&n);
43     a[1]=1;
44     len=1;
45     for(int k=2; k<=n; k++) {
46         for(i=1; i<=len; i++) {
47             a[i]=a[i]*k;
48         }
49         for(i=1; i<=len; i++) {
50             if(a[i]>=10) {
51                 a[i+1]+=a[i]/10;
52                 a[i]%=10;
53             }
54         }
55         while(a[len+1]>0) {
56             len++;
57             a[len+1]=a[len]/10;
58             a[len]=a[len]%10;
59         }
60     }
61     for(i=len; i>=1; i--)
62         printf("%d",a[i]);
63 
64 }

 



posted @ 2017-05-16 20:26  ioioioioioio  阅读(3322)  评论(0编辑  收藏  举报