求阶乘位数,可以使用math自带的log10函数,也可以每一步乘上去,在每一步维护结果小于10(除以10只到结果小于10,每除一次计数器+1,相当于维持科学计数法的表示),最后输出结果为(计数器+1),比log10函数要快
#include<cstdio>
int main(){
int tcase;
int n;
int i;
double f;
int count;
scanf("%d",&tcase);
for(tcase;tcase>0;tcase--){
scanf("%d",&n);
f=1.0;
count=0;
for(i=2;i<n+1;i++){
f*=i;
while(f>=10.0) {f/=10;count++;}
}
printf("%d\n",count+1);
}
}
有人找出了这个结果的近似公式,
log10(n!) = log10(sqrt(2 * pi * n)) + n * log10(n / e)
π和e精度符合要求能轻松ac