南阳--69(数的长度)

数的长度

时间限制:3000 ms  |  内存限制:65535 KB
难度:1
 
描述

    N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?

 
输入
首行输入n,表示有多少组测试数据(n<10)
随后n行每行输入一组测试数据 N( 0 < N < 1000000 )
输出
对于每个数N,输出N!的(十进制)位数。
样例输入
3
1
3
32000
样例输出
1
1
130271
来源
ACM教程
上传者
rooot
//斯特林公式:(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );(耗时少)
推导→n!的位数为[lg(n*(n-1)*(n-2)*…..*1)]+1=[lg(n)+lg(n-1)+lg(n-2)   +….+lg(1)]+1 (耗时多)
 1 #include <stdio.h>
 2 #include <math.h>
 3 int main()
 4 {
 5     int n, i, t ; 
 6     double d ;
 7     scanf("%d", &t) ;
 8     while(t--)
 9     {
10         scanf("%d", &n) ;
11         d = 0.0 ;
12         for(i=1; i<=n; i++)
13         d+=log10(i)    ;
14         printf("%d
", (int)d+1) ;
15     } 
16     return 0 ;
17 }
原文地址:https://www.cnblogs.com/soTired/p/4634354.html