难度:
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
-
#include<stdio.h> #include<math.h> int main() { int i,j,k; double sum; int n,N; scanf("%d",&n); while(n--) { sum=0; scanf("%d",&N); for(j=1;j<=N;j++) sum+=log10(j); k=(int)sum+1; printf("%d\n",k); } return 0; }
思路详解:改程序使用lg1*2*3*...*(n-1)*n=lg1+lg2+lg3+..+lg(n-1)+lgn来做,首先使用math头文件,然后使用for循环对sun累加,sum=lgj,当然,这里的sum是double类型,累加后,对sum取整,然后加1,即为要求的位数,如lg1000=3;而1000是4位数,当然只要不大于10000,之间的数都是4位数,若是10000,则lg=4,再加1还是5位数,所以这个方法值得借鉴,但当n比较大时,耗费时间较长,可以借鉴斯特林公式。