1018:
Big Number
让你计算一个数的阶乘有几位?
因为数字十分大,有10^7,所有明显用for和while组合会超时。
这个是一个公式,求n!时,它的位数等于log(1)+...+log(n);
但是定义位数num时最好定义为double型,好像是精度问题 ,最后求几位的时候用强制转换类型。
(int)num+1就可以了。要不然用(int)(num+0.5)的话可能会不对。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
//int ss[1000];
int n,a;
double num; //这里要写成double型的比较好
scanf("%d",&n);
while(n--){
num=0;
scanf("%d",&a);
for(int i=1;i<=a;i++){
num+=log10(i); //这个是一个公式,求n!时,它的位数等于log(1)+...+log(n);
}
printf("%d\n",(int)num+1);
}
}