51Nod_1130 N的阶乘的长度 V2(斯特林近似)
http://www.51nod.com/Challenge/Problem.html#!#problemId=1130
题目
输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。
输入
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000);第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)
输出
共T行,输出对应的阶乘的长度。
样例输入
3
4
5
6
样例输出
2
3
3
分析
相比1058 N的阶乘的长度来说,此题的数据范围更大,使用原来的方法会使得程序超时,因此需要使用 斯特林公式 (Stirling公式)
C语言程序
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
int main()
{
int n,t;
long long res;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
res=(long long)((0.5*log(2*PI*n)+n*log(n)-n)/log(10));
printf("%lld\n", res+1);
}
return 0;
}