n!结果的位数
来源:互联网 发布:淘宝助手复制宝贝 编辑:程序博客网 时间:2024/05/13 12:54
Description
对于n,求n!有多少位
Input
多组输入。每组输入包含一个整数n(1<=n<=10^6)。输入以EOF结束。
Output
对于每组输入,输出一个数表示n!有的位数
Sample Input
34
Sample Output
12
Hint
注意数据范围
——————————————————————————————————————————————
分析:可以看到n的范围很大,直接求n的阶乘再去算位数是不可能AC的。
解法一:
常规算法,n的阶乘就等于lg(1)+lg(2)+…+lg(n)取整后加1
C语言代码如下:
01
#include <stdio.h>
02
#include <math.h>
03
int
main(
void
)
04
{
05
register
int
i;
06
int
n;
07
double
d;
08
while
(
scanf
(
"%d"
,&n)!=EOF)
09
{
10
d=0;
11
for
(i=1;i<=n;i++)
12
d+=
log10
(i);
13
printf
(
"%d\n"
,(
int
) d+1);
14
}
15
}
但是提交后TLE了,原因是时间复杂度为O(n),于是改用下面的解法。
解法二:
应用stirling公式,推出计算方法,写成的C语言代码如下:
01
#include <stdio.h>
02
#include <math.h>
03
#define PI acos(-1)
04
int
main(
void
)
05
{
06
int
len,N;
07
while
(
scanf
(
"%d"
,&N)!=EOF)
08
{
09
if
(N==1)
10
len=1;
11
else
12
len=(
int
)
ceil
((N*
log
(N)-N+
log
(2*N*PI)/2)/
log
(10));
13
printf
(
"%d\n"
,len);
14
}
15
}
- n!结果的位数
- 阶乘N!求结果的位数 n<10000
- n^n的第一位数
- N^N的第一位数
- N!的位数
- 求N!的位数
- 求N!的位数
- N!的位数
- 计算n!的位数
- 求N!的位数
- n!的位数
- N!的位数
- N!的位数
- n的阶乘的位数
- 求大数n!的位数
- PKU1423:求n!的位数。
- POJ_1423_Big Number(n!的位数)
- 高精度之 N!的位数
- “2013年度中国杰出开源人物”榜单出炉!
- IT名词拾遗录
- NYOJ-大数阶乘-28
- property和constructor-arg的使用
- C#编程规范
- n!结果的位数
- Linux下U盘无法卸载的问题
- BZOJ 1562([NOI2009]变换序列-匈牙利算法)
- GetTextMetrics与GetTextExtent的区别
- 使用NEC 78K0系列单片机扩展功能
- hdu 4526 拼车记 神奇的dp
- 多线程并行下载,断点续传
- 图片自适应Picture控件大小
- Servlet中的request.getParameter() 研究,api解读,以及解码申明