1166: 阶乘问题(一) [数学]
时间限制: 1 Sec 内存限制: 128 MB提交: 52 解决: 21 统计
题目描述
小H对阶乘!很感兴趣。现在他想知道N!N!的位数,由于NN太大了,所以请了你这个BestCoder来帮忙。
输入
第一行输入一个整数TT,代表有TT组测试数据。
每组数据输入一个整数NN。
注:1<=T<=10,1<=N<=2∗1061<=T<=10,1<=N<=2∗106。
输出
对每组数据,输出N!N!的位数。
样例输入
2
100
1000
样例输出
158
2568
这道题其实原理很简单,就是利用斯特灵公式来计算n!的位数
我们两边取10的对数,我们知道lg10=1,lg100=2,其实你也猜到了,没错,lg可以用来计算数的位数,那么lgn!也就是答案
因此我们得到了斯特林公式:
、
#include<cstdio>
#include<math.h>
#include<iostream>
using namespace std;
int main()
{
long long n,t;
cin>>t;
while(t--)
{
cin>>n;
if(n==1) cout<<"1"<<endl;
else
cout<<(int)ceil((log10(sqrt(2.0*M_PI*n))+n*(log10(n)-log10(M_E))))<<endl;
}
return 0;
}