本文共 1178 字,大约阅读时间需要 3 分钟。
为了确定给定整数 n 的阶乘的位数,我们可以使用斯特林公式进行近似计算。斯特林公式能够有效地估算很大数 n! 的位数,而不需要实际计算 n!。以下是详细的解决方案:
#include#include #define PI 3.141592653589793#define LN10 2.302585093using namespace std;int countDigits(int n) { if (n == 0) return 1; // 0! 是 1,是 1 位数 double log_n = log(n); double term1 = n * log_n; term1 -= n; double log_two_pi_n = log(2 * PI * n); term1 += 0.5 * log_two_pi_n; double log10_fact = term1 / LN10; int digits = static_cast (floor(log10_fact)) + 1; return digits;}int main() { int num; cin >> num; for (int i = 0; i < num; ++i) { int t; cin >> t; int res = countDigits(t); cout << res << endl; }}
countDigits
:该函数接收整数 n,并利用斯特林公式计算 n! 的位数。log(n)
:计算自然对数。term1
:计算n * log(n) - n。log(2 * π * n)
:计算 ln(2πn)。term1 += 0.5 * log_two_pi_n
:调整项。log10_fact
:将近似 ln(n!) 转换为 log10。digits
:通过取整(地板)并加1得到位数。main
:读取输入,处理每个测试用例,输出结果。通过该代码,我们可以高效且准确地计算出给定整数 n 的阶乘的位数。
转载地址:http://qfcvz.baihongyu.com/