Андрей Asked:2022-02-01 09:39:16 +0000 UTC2022-02-01 09:39:16 +0000 UTC 2022-02-01 09:39:16 +0000 UTC 长算术阶乘和位数 772 有必要实现一个算法来找到 300!, 3000!, 10000! 的阶乘!在 C++ 中并找出位数 c++ 1 个回答 Voted Best Answer VladosYetti 2022-02-01T09:53:37Z2022-02-01T09:53:37Z #define USE_MATH_DEFINES_ #include <iostream> #include <vector> #include <string> #include <cmath> using namespace std; int numberFactorial(const int n) { return ceil(log10(M_PI * M_E * n) / 2 + n * log10(n / M_E)); } int bar(int currSize, int x, vector<int>&arr) { int curr = 0; for(size_t i = 0; i < currSize; ++i) { int prod = arr[i] * x + curr; arr[i] = prod % 10; curr = prod / 10; } while(curr) { arr[currSize] = curr % 10; curr /= 10; ++currSize; } return currSize; } string longFactorial(const int n) { int currSize = 1; string res; vector<int>arr(numberFactorial(n),0); arr[0] = 1; for(size_t i = 2; i <= n; ++i) { currSize = bar(currSize, i, arr); } for(int i = currSize - 1; i >= 0; --i) { res += (arr[i] + 0x30); } return res; } int main(void) { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; cout << numberFactorial(n) << endl; cout << longFactorial(n) << endl; cin.get(); return EXIT_SUCCESS; }
1 个回答