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 }