/*
求m!的位数,1<=m<=10^7.时间1s。
使用Stirling公式进行求解 n!~~~~~~(n/e)^n(2*pi*n)^(1/2)
*/
#include<iostream>
#include<cmath>
using namespace std;
const double e=2.7182818284590452354,pi=3.141592653589793239;
double str_ling(int n)
{
return 0.5*log10(2*pi*n)+n*log10(n/e);
}
int main()
{
int t,m;
cin>>t;
while(t--)
{
cin>>m;
cout<<(int)str_ling(m)+1<<endl;
}
return 0;
}
求m!的位数,1<=m<=10^7.时间1s。
使用Stirling公式进行求解 n!~~~~~~(n/e)^n(2*pi*n)^(1/2)
*/
#include<iostream>
#include<cmath>
using namespace std;
const double e=2.7182818284590452354,pi=3.141592653589793239;
double str_ling(int n)
{
return 0.5*log10(2*pi*n)+n*log10(n/e);
}
int main()
{
int t,m;
cin>>t;
while(t--)
{
cin>>m;
cout<<(int)str_ling(m)+1<<endl;
}
return 0;
}
Stirling公式计算阶乘位数
本文介绍了一种利用Stirling公式快速计算任意整数阶乘位数的方法,并提供了一个C++实现示例,该程序可在1秒内计算出1到10^7范围内任意整数阶乘的位数。
1304

被折叠的 条评论
为什么被折叠?



