zoukankan      html  css  js  c++  java
  • light oj 1045

    Factorial of an integer is defined by the following function

    f(0) = 1

    f(n) = f(n - 1) * n, if(n > 0)

    So, factorial of 5 is 120. But in different bases, the factorial may be different. For example, factorial of 5 in base 8 is 170.

    In this problem, you have to find the number of digit(s) of the factorial of an integer in a certain base.

    Input

    Input starts with an integer T (≤ 50000), denoting the number of test cases.

    Each case begins with two integers n (0 ≤ n ≤ 106) and base (2 ≤ base ≤ 1000). Both of these integers will be given in decimal.

    Output

    For each case of input you have to print the case number and the digit(s) of factorial n in the given base.

    Sample Input

    Output for Sample Input

    5

    5 10

    8 10

    22 3

    1000000 2

    0 100

    Case 1: 3

    Case 2: 5

    Case 3: 45

    Case 4: 18488885

    Case 5: 1

    题意:求阶乘在不同进制下的位数。

    用对数搞一搞就好啦,设阶乘n在k进制下位数为sum,sum=(int)logk(n!)+1=(int)(log10(n!)/log10(k))+1;然后以10为底打个表就好了。

    注意n==0的时候特判一下。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #define LL long long
    using namespace std;
    double sum[1000005];
    void inin()
    {
        sum[0]=0.0;
        for(int i=1; i<=1000000; i++)
            sum[i]=sum[i-1]+log10(i);
    }
    int main()
    {
        inin();
        int T, t=1, n, k;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d%d", &n, &k);
            if(n==0)printf("Case %d: 1
    ", t++);
            else
            printf("Case %d: %d
    ", t++, (int)(sum[n]/log10(k))+1);
        }
        return 0;
    }
  • 相关阅读:
    Notepad++编写Markdown
    解决Unable to create new native thread
    Outlook2016 新装进阶操作指南
    卷积神经网络
    反向传播算法
    神经网络的基本组成
    cs231n课程索引
    快速入门特征工程
    快速入门Sklearn
    快速入门Matplotlib
  • 原文地址:https://www.cnblogs.com/zhulei2/p/8214088.html
Copyright © 2011-2022 走看看