1166: 阶乘问题(一) [数学]
时间限制: 1 Sec 内存限制: 128 MB提交: 41 解决: 18
题目描述
小H对阶乘!很感兴趣。现在他想知道
N!
的位数,由于
N
太大了,所以请了你这个BestCoder来帮忙。
输入
第一行输入一个整数
T
,代表有
T
组测试数据。
每组数据输入一个整数 N
。
注: 1<=T<=10,1<=N<=2∗106
。
输出
对每组数据,输出
N!
的位数。
样例输入
2
100
1000
样例输出
158 2568 解析 思路:n! = n * (n-1) * (n-2) * ... * 3 * 2 *1 要求其位数,可以求它以10为底的对数再向上取整 也可以使用floor函数向上取整。 floor函数点击打开链接 程序如下: #include<cstdio> #include<cmath> int main() { int i,j,k; double sum; int T,N; scanf("%d",&T); while(T--) { sum=0; scanf("%d",&N); for(j=1;j<=N;j++) sum+=log10(j); k=(int)sum+1; printf("%d\n",k); } return 0; } 或者#include<cstdio> #include<cmath> int main() { int i,j,k; double sum; int T,N; scanf("%d",&T); while(T--) { sum=0; scanf("%d",&N); for(j=1;j<=N;j++) sum+=log10(j); k=(int)floor(sum+1); printf("%d\n",k); } return 0; }