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        

 

posted @ 2012-08-17 10:57  zhongya  阅读(136)  评论(0编辑  收藏  举报