基本思想:
注意一下,1000的阶乘在2000位数字以上,之前西交考察过类似的脑筋急转弯题目;
关键点:
无;
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; const int maxn = 100000; struct bign { int len; int num[maxn]; bign() { fill(num, num + maxn, 0); len = 0; } }; bign trans(int n) { bign a; while (n!=0){ a.num[a.len++] = n % 10; n /= 10; } return a; } bign multi(bign a, int n) { int carry = 0; for (int i = 0; i < a.len; i++) { int temp = carry + a.num[i] * n; a.num[i] = temp % 10; carry = temp / 10; } while (carry != 0) { a.num[a.len++] = carry % 10; carry /= 10; } return a; } string bign2string(bign a) { string s = ""; for (int i = a.len - 1; i >= 0; i--) { s += char(a.num[i] + '0'); } return s; } int main() { int n; while (cin>>n){ if (n == 0) { cout << 0 << endl; continue; } bign a = trans(n); for (int i = n - 1; i >= 2; i--) { a=multi(a, i); } cout << bign2string(a) << endl; } return 0; }