hdu1018Big Number
题意
求某个数的阶乘是几位数。
1.直接用1og10的积化和差公式,向下取整+1即可,不过会超时
# include <stdio.h>
# include <math.h>
int main() {
int T;
scanf("%d",&T);
int num;
while(T--) {
scanf("%d",&num);
float sum = 0;
for(int i = 1; i <= num; i++) {
sum += log10((double)i);
}
printf("%d\n",(int)sum + 1);//如果不强转,可能会进位导致错误
}
return 0;
}
2.斯特林公式:lnN!=NlnN-N+0.5ln(2N*pi)
# include <stdio.h>
# include <math.h>
const double PI = acos(-1.0);
const double E = exp(1.0);
int main() {
int n;
int M;
scanf("%d",&n);
while(n--) {
scanf("%d",&M);
printf("%d\n",(int)(0.5*log10(2.0*PI*M) + M*log10(M*1.0/E)) + 1);
}
return 0;
}