zoukankan      html  css  js  c++  java
  • NYOJ——————数的长度(斯特林公式的应用)

     

    数的长度

    时间限制:3000 ms  |  内存限制:65535 KB
    难度: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
    
    来源
    ACM教程
    上传者
    rooot

        此题的最佳解法为:斯特林解法何为斯特林,在下也不好说,是1730年前的一位数学家提出来的构想:

          如何快速求出n!的位数呢? 数学上的公式为:

                                                                strlen(n!)=log10(√2*Π*n)+n*log10(n/e);

    所以只需要将其转化为计算机上的公式即可:

                                                           其中Π=2*acos(0.0)或者Π=4*atan(1.0);

                                                                e=exp(1);

      所以用计算机敲出来为:    length=log10(sqrt(4*acos(0.0)*n))+n*log10(n/exp(1));

    故代码如下:

              

    #include<cstdio>
    #include<cmath>
    #include<iostream>
    using namespace std;
    int main()
    {
        int t,n;
        cin>>t;
        while(t--)
        {
          scanf("%d",&n);
          int num=log10(sqrt(4.0*acos(0.0)*n))+n*log10(1.0*n/exp(1));
          printf("%d
    ",num+1);
        }
     return 0;
    }
    View Code
  • 相关阅读:
    一条代码快速解决滚动条隐藏问题
    微信小程序:wx:for循环输出的使用方法以及简单例子
    点运算符(.)和中括号运算符([])有哪些区别
    线程
    ArrayMap 和HashMap的区别
    Android加载图片的策略
    Android图片加载为什么选择glide
    Android 设计模式对比
    Android 注解框架对比
    ReactNative编写规范
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3210384.html
Copyright © 2011-2022 走看看