一个数a的位数等于(int)(log10(double(a))),由于本题位数较大所以直接暴力先算阶乘再求位数会超时,所以利用刚才的结论得到:
若求A!则位数为(int)(log10(double)(A))=int(log10(1*2*3.......A))=int(log10(1)+log10(2)+.......log10(A));
即得解,注意在代码中存放长度的变量应为double型
代码如下:
//任意一个正整数a的位数等于(int)log10(a) + 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
while(n--){
int i,m;
double Long=0; //注意此处应为double型变量
scanf("%d",&m);
for(i=1;i<=m;i++){
Long+=(log10(double(i)));
}
printf("%d\n",(int)Long+1);
}
}
位数的推论: 点击打开链接