zoukankan      html  css  js  c++  java
  • LETTers比赛第四场N!的最高位

    N!的最高位

    该题如果直接用上述方法必然会超时,因为只要最高位,精确的方法可以是x=(int)(10^( log10(N!)-(int)log10(N!))),但由于n可能很大,这样都会超时,这里用到一个公式,Stirling公式,在n较小时直接给出,在较大时用Sterling公式算出n!近似值,再求的最高位。

    #include<iostream>
    #include<math.h>
    using namespace std;
    const double PI = 3.14159265358979323846;
    const double E = 2.71828182845904523536;
    const int m[9] = {1,1,2,6,2,1,7,5,4};
    int main(void)
    {
        int n;
        double k;
        while(cin >> n)
        {
            if(n<=8)
            {
                cout << m[n] << endl;
                continue;
            }
            k = log10(2*PI*n)/2 + n*log10(n/E);
            cout << int(pow(10, k-int(k))) << endl;
        }
        return 0;
    }
  • 相关阅读:
    acm常见错误-持续更新
    学习之旅
    快速幂
    写个管理自我的小工具
    Tree构建
    Sql server学习
    asp.net webAPI学习
    AngularJS数据双向绑定
    虚拟机学习
    wps学习
  • 原文地址:https://www.cnblogs.com/LETTers/p/2456072.html
Copyright © 2011-2022 走看看