输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)
Output
共T行,输出对应的阶乘的长度。
Sample Input
3
4
5
6
Sample Output
2
3
3
首先要知道斯特林公式 :
利用此公式就可以求出n!的位数
数学知识:
n! 的位数 = lg(n!)+ 1 ;
换底公式 :lnN!/ln10=log10 N!
结果有可能超int 要用long long int
带参宏的写法:#define Stirling(N) (LL)((0.5*log(2*PI*N)+N*log(N)-N)/log(10))+1
引用一下大佬的博客:https://blog.csdn.net/liangzhaoyang1/article/details/51145807
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#define PI acos(-1.0)
#define Stirling(N) (LL)((0.5*log(2*PI*N)+N*log(N)-N)/log(10))+1
using namespace std;
typedef long long int LL;
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
scanf("%d",&n);
printf("%lld\n",Stirling(n));
}
return 0;
}