您的位置:首页 > 其它

NYOJ 69 阶乘位数长度

2015-07-21 15:40 281 查看
难度: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比较大时,耗费时间较长,可以借鉴斯特林公式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: