博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】
阅读量:6376 次
发布时间:2019-06-23

本文共 1145 字,大约阅读时间需要 3 分钟。

1:把n!写成10^m次方的形式,如果m=2,就说明是三位数。

【维基百科】

【别处摘来的】可以将n!表示成10的次幂,即n!=10^M(10的M次方,10^2是3位M+1就代表位数)则不小于M的最小整数就是

    n!的位数,对该式两边取对数,有M=log10^n!即:
    M = log10^1+log10^2+log10^3...+log10^n
    循环求和,就能算得M值

,该M是n!的精确位数。

Problem :     Judge Status : Accepted
RunId : 6013028    Language : C    Author :
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
1 #include 
2 #include
3 int main() 4 { 5 int n,cas,i; 6 double sum; 7 scanf("%d",&cas); 8 while (cas--) 9 {10 scanf("%d",&n);11 sum=1;12 for(i=1;i<=n;i++) sum+=log10((double)i);13 printf("%d\n",(int)sum);14 }15 return 0;16 }

2:斯特林公式的应用【没用这个,代码是别人的】

由斯特林[striling]公式可得:lnN!=NlnN-N+0.5ln(2N*pi)

而N的阶乘的位数等于:log10(N!)取整后加1

log10(N!)=lnN!/ln(10) 所以len=lnN!/ln(10)+1

1 #include
2 #include
3 const double PI=3.14159265; 4 using namespace std; 5 int main() 6 { 7 int t,n; 8 double sum; 9 cin>>t;10 while(t--)11 { 12 cin>>n;13 sum=(n*log(n) - n + 0.5*log(2*n*PI))/log(10)+1;14 printf("%d/n",(int)sum); 15 }16 return 0;17 }

 

转载地址:http://wwxqa.baihongyu.com/

你可能感兴趣的文章
用pythonturtle写名字_去年爆款新生儿名字,家长自以为起的不错,却有“棺材”的意思...
查看>>
句子分类_语法微课句子的分类+文本讲解
查看>>
显示提示_体检报告显示:“转氨酶”升高!提示身体可能出现了这些健康问题...
查看>>
图形化分析工具_推荐一款基于小米 soar 的开源 sql 分析与优化的 web 图形化工具...
查看>>
485 工控机 接线方式_RS485温湿度传感器的接线方式及注意事项
查看>>
12306排队是什么意思_12306订单请求排队中是什么意思 要等多久
查看>>
u3d游戏开发视频潭州_unity3d教程视频-unity3d教程中文零基础入门/u3d游戏开发/特效案例/项目实战V2.0 最新版 - 极光站...
查看>>
c++区块链实例_cpp 区块链模拟示例(二)工程代码解析
查看>>
hourglass论文_论文笔记 Stacked Hourglass Networks for Human Pose Estimation
查看>>
java 接口的本质_Java基本概念:接口
查看>>
java死锁的解决_java中常见的死锁以及解决方法代码
查看>>
java菜单栏不下拉_我java代码中的下拉列表设好后为什么无法下拉?
查看>>
java传递引用类型的实质_java的引用类型以及值传递
查看>>
java策略模式使用场景,Java设计模式—策略模式
查看>>
RHEL6.3实现基于加密的用户认证验证访问
查看>>
SCCM2012 R2实战系列之十一:解决OSD分发Windows7 系统盘盘符为’D’问题
查看>>
经验分享:我是如何在网店无货源情况下快速出单?
查看>>
当AD服务器置于防火墙内时,所需开放的端口
查看>>
限免的Mac App套件,工程师绝对不可错过
查看>>
Exchange 2013 添加地址列表到脱机通讯簿
查看>>