zoukankan      html  css  js  c++  java
  • 51nod1130N的阶乘的长度V2(斯特林近似)套斯特林公式

    输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。

    输入

    第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
    第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)

    输出

    共T行,输出对应的阶乘的长度。

    输入样例

    3
    4
    5
    6

    输出样例

    2
    3
    3


    对于n来说,要是求阶乘的话数据范围需要达到10^9以上才可以使用斯特林公式,否则会精度损失,造成误差比较大。
    但是要是求的是n的阶乘的长度的话,可以利用公式((log10(2*PI*n))/2+n*(log10(n/e))+1),但是直接让计算机去求对数即lgN!+1这个好像是不对的,我用了
    (ll)((log10(sqrt(2*PI*n*1.00))*pow(n/e,n))+1))运行都是错的,所以求长度还是用第一个,自己求好对数再让计算机去运行吧



     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<cmath>
     4 using namespace std;
     5 const double PI=3.1415926535898;
     6 const double e=2.718281828459;
     7 typedef long long ll;
     8 
     9 int main()
    10 {
    11     int tt,n;
    12     scanf("%d",&tt);
    13     while(tt--)
    14     {
    15         scanf("%d",&n);
    16         printf("%lld\n",(ll)((log10(2*PI*n))/2+n*(log10(n/e))+1));//注意是long long,int的话会WA
    17     }
    18     return 0;
    19 }
     
  • 相关阅读:
    VMwarePro密钥
    Windows事件ID
    python中安装下载超时,下载不了安装包
    PNG文件结构分析 ---Png解析
    世界协调时间(UTC)与中国标准时间
    计算机用户权限比较
    pikachu-xx型注入
    pikachu-搜索型注入 #手工注入
    显示桌面图标
    SQL2005 数据库还原到 SQL2008 错误 3145 解决办法
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11341347.html
Copyright © 2011-2022 走看看