HDU 1018
在草稿纸上算了半天,结果搜到了公式我了个去啊!搞ACM的数学不好真是太。。。。
View Code
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 5 int main() 6 { 7 int i,j,ncases,num,count; 8 double sum; 9 10 scanf("%d",&ncases); 11 while( ncases-- ) 12 { 13 scanf("%d",&num); 14 sum = 0.0; 15 for(i=2; i<=num; i++) 16 { 17 sum += log10(i); 18 } 19 count = (int)sum + 1; 20 21 printf("%d\n",count); 22 } 23 24 system("pause"); 25 return 0; 26 }
log10(n) 取整加1就可以求出n的位数,log(n!)+1就是所要求得值;下面又发现一个神一般的公式,不太理解。。。
View Code
1 #include<stdio.h> 2 #include<math.h> 3 #include<stdlib.h> 4 #include<string.h> 5 const double PI = 3.14159265; 6 7 int main() 8 { 9 int i,n,ncases,len; 10 11 scanf("%d",&ncases); 12 while( ncases-- ) 13 { 14 scanf("%d",&n); 15 len = ceil((n*log(n) - n + log(2*n*PI)/2)/log(10)); 16 printf("%d\n",len); 17 } 18 system("pause"); 19 return 0; 20 } 21