zoukankan      html  css  js  c++  java
  • Digits of Factorial LightOJ

    原文地址: https://blog.csdn.net/fenghoumilin/article/details/52293910

    题意:求 n 的阶乘在 base 进制下的位数,这里有一个简单的方法,就是log10(n)+ 1就是 n 的在十进制下的位数(想一下 为什么。。。),由此可知 log base(n)+ 1 就是n在base 进制下的位数,再根据换底公式,log base(n) == log(n)/ log(base),这里让求的是阶乘,根据log的原理呢,就有log base (n!) == ( log(n) + log(n-1) + log(n-2) + 。。。。+ log(1)) / log(base)。用 sum 数组存一下 log(n!) 就可以快速的求出了

    #include <iostream>
    #include <cstdio>
    #include <sstream>
    #include <cstring>
    #include <map>
    #include <set>
    #include <vector>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <cmath>
    #define MOD 2018
    #define LL long long
    #define ULL unsigned long long
    #define Pair pair<int, int>
    #define mem(a, b) memset(a, b, sizeof(a))
    #define _  ios_base::sync_with_stdio(0),cin.tie(0)
    //freopen("1.txt", "r", stdin);
    using namespace std;
    const int maxn = 1000000 + 5, INF = 0x7fffffff;
    double num[maxn];    //注意类型
    
    int main()
    {
        num[0] = 0;
        for(int i=1; i<maxn; i++)
            num[i] = num[i-1] + log(1.0 * i);
        int T, kase = 0;
        scanf("%d",&T);
        while(T--)
        {
            int n, base;
            scanf("%d%d",&n,&base);
            int ans = num[n]/log(1.0 * base) + 1;
            printf("Case %d: %d
    ", ++kase, ans);
        }
    
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    篮球中PRA意思
    篮球中PRA意思
    Ajax介绍
    QQ播放器代码
    QQ播放器代码
    QQ播放器代码
    DataSet对象
    DataReader对象
    Connection对象
    DataAdapter对象
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9342753.html
Copyright © 2011-2022 走看看