题目链接:51nod1130

求位数公式是 log10(n)+1  然后此题让求的是n的阶乘的位数

那么很多同学会想到  log0(N!)=log10(1*2*3...*N)+1 = log10(1)+log(2)+log(3)+....+log(N)+1

但是这道题N最大是1e9  所以这种方法肯定会超时   所以我们需要用新的方法

斯特林公式能够近似的求出n的阶乘的值  然后我们再用  求位数公式  log10(n)+1就可以求出答案

斯特林公式   sqrt( 2*pi*n ) * pow( n/e , n)

斯特林公式 

而且  log10()内的乘法 又可以转化为加法  那么我们就可以对斯特林公式优化为

    0.5 * log10( 2*PI*n ) + n*log10( n/e )

要注意   公式里用到了 e 和 π   我们定义他们有两种写法

#define PI acos(-1.0)
#define E exp(1.0)const double e = 2.718281828459;
const double pi = 3.1415926535;

建议大家使用第一种

exp()是e的指数幂   括号内是double型   返回值也是double    e(1.0)=e^1=e    ,e(-1.0)=e^-1

acos()是反三角函数   括号内是double型   返回值也是double  acos(-1.0)=π

尤其是这道题  数据特别的卡 刚开始 我定义e =2.71828182845; 疯狂的wa  wa了七八遍后  我又多加了一位e =2.718281828459  就对了。。。

所以  由于有的时候 我们不知道数据需要几位  用赋值的定义方式就可能出错

代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long ll;
#define PI acos(-1.0)
#define E exp(1.0)
const double e = 2.718281828459;
const double pi = 3.1415926535;
int T;
double n;
int main(){scanf("%d",&T);while(T--){scanf("%lf",&n);ll ans=(ll)(0.5*log10(2*PI*n) + n*(log10(n/E)) +1);printf("%I64d\n",ans);}return 0;
}

51nod1130---斯特林公式相关推荐

  1. 斯特林公式(Stirling's approximation)

    斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候, ...

  2. 【牛客 - 185F】 假的数学游戏(斯特林公式,大数Java打表)

    题干: 输入描述: 第一行:一个整数X 输出描述: 第一行:一个整数N 示例1 输入 复制 7 输出 复制 10 备注: 每个测试点所对应的X满足:第i个测试点输入的值为第i-1个测试点输入的值乘以1 ...

  3. 阶乘与 pi 的关系 —— 斯特林公式(Stirling formula)

    Stirling's Formula n!≈2πn−−−√(ne)n n!\approx \sqrt{2\pi n}\left(\frac{n}{e}\right)^n (1)斯特林公式是阶乘的逼近公 ...

  4. 斯特林公式--求n!的位数

    斯特林公式: #include<stdio.h> #include<math.h> int main(void) {int T;double n;scanf("%d& ...

  5. 1018Big Number用斯特林公式的简化公式和不用公式解决

    1018http://acm.hdu.edu.cn/showproblem.php?pid=1018 在其中要体现一下几个问题: 一.一个整数的位数计算 二.优化算法 设有一个整数n,且10x-1≤n ...

  6. HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】

    1:把n!写成10^m次方的形式,如果m=2,就说明是三位数. [维基百科] [别处摘来的]可以将n!表示成10的次幂,即n!=10^M(10的M次方,10^2是3位M+1就代表位数)则不小于M的最小 ...

  7. 【高等数学】伽马函数与斯特林公式

    伽马函数的背景   1728年,哥德巴赫在考虑数列插值的问题,通俗的说就是把数列的通项公式定义从整数集合延拓到实数集合,例如数列1,4,9,16-可以用通项公式n²自然的表达,即便 n 为实数的时候, ...

  8. 不凡的夫夫 斯特林公式的应用

    链接:https://www.nowcoder.com/acm/contest/75/A 来源:牛客网 题目描述 夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样, 所以他想知道给一个整 ...

  9. 斯特林公式、沃利斯公式

    目录 一,斯特林公式 1,公式 2,证明 3,更多项 4,变形 二,沃利斯公式 1,公式 2,变形 一,斯特林公式 1,公式 2,证明 3,更多项 用以上方法可以求出  的前任意多项. 4,变形 两边 ...

  10. 求N的阶乘长度(斯特林公式)

    输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. 求N的阶乘长度 计算n!的公式是斯特林公式: 计算一个数的长度为 log10(n) +1 AC代码: /*** ┏┓ ┏┓+ + ...

最新文章

  1. 获取本机IP_考虑多网卡的情况
  2. Java io流---拷贝目录
  3. android车载娱乐系统场景,智能汽车、家庭娱乐系统、工业自动化场景中接口应用设计...
  4. 三包围结构的字是什么样的_男孩起名精选:搭配美观,结构合理的男宝宝名字...
  5. 前端3D轨迹可视化渲染
  6. 第十二周 项目一--图基本算法库
  7. 笔记本电脑共享WiFi
  8. 盘点2022年爆火的小程序游戏
  9. Flutter 之页面状态保持
  10. HDFS遍历子目录 Hadoop fs -ls -R path
  11. 读《沟通的方法》推荐序有感
  12. 迪文串口屏(DMG10600C101-03WTC)的使用测试
  13. 使用UAS-GAL4系统在果蝇中敲低某一基因的表达
  14. android老人字体变大,适合老年人用的安卓手机软件 一键让Android字体变大
  15. 苹果手机怎么用计算机打出字,iPhone输入法忽然打不出中文怎么办?收下这份指南日常打字如飞!...
  16. html 图片repeat,html中repeat技术分享
  17. 直击招聘程序员面试笔试C语言深度解析,直击招聘 程序员面试笔试C++语言深度解析(直击招聘) pdf epub mobi txt 下载...
  18. [go]Go语言编译器的 “//go:“ 详解
  19. python实验原理_【python】《统计学原理实验教程(Python)》书中代码实现
  20. 使用ReadyFor4GB

热门文章

  1. dubbo入门级梳理
  2. Java知多少(31)static关键字以及Java静态变量和静态方法
  3. 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”
  4. Linux内核等待队列wait_queue学习
  5. Java是传值还是传引用
  6. zookeeper leader选举过程
  7. win10禁止自动更新
  8. UML进行Linux内核调试
  9. python3 爬虫
  10. 常用的sql语句集锦