注解
1、一个数字x的位数可用以10为底的对数加一获得(联想到n进制是用指数形式表示的,指数函数的反函数就是对数函数,因此可以想到对数函数表示数字的位数),也就是
x的位数=(int)Math.log10(x)+1
2、对数里相乘可以写成对数相加的形式,也就是
log(a1a2a3)=loga1+loga2+loga3
3、综合以上两条,把阶乘形式先按2变成对数和的形式,求出的得数取整就是1式右边的第一项,然后再加1就是答案。
代码
#include <stdio.h>
#include <math.h>
int main(){
int n;
scanf("%d", &n);
while(n--){
int m;
scanf("%d", &m);
double tmp = 0;
for(int i=1; i<=m; i++){
tmp += log10(i);
}
int ans = (int)tmp + 1;
printf("%d\n", ans);
}
return 0;
}