首页 > 图灵资讯 > 技术篇>正文

LightOJ - 1045 Digits of Factorial (数学公式) 对数换低公式

2023-04-20 16:59:03

  LightOJ - 1045

  Digits of Factorial

  SubmitStatus

  Description

  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 integerT (≤ 50000), denoting the number of test cases.

  Each case begins with two integersn (0 ≤ n ≤ 106)andbase (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

  5

  5 10

  8 10

  22 3

  1000000 2

  0 100

  Sample Output

  Case 1: 3

  Case 2: 5

  Case 3: 45

  Case 4: 18488885

  Case 5: 1

  Source

  Problem Setter: Jane Alam Jan

  //题意:输入n,m

  给你一个数n,让你求n的阶乘数转换成m进制数的位数。

  //思路:

  用对数代替低公式loggg(a)(b)=log(c)(b)/log(c)(a);#include#include#include#include#include#define N 1000010using namespace std;double sum[N];int init(){for(int i=1;i<=N;i++)sum[i]=sum[i-1]+log10(i);}int main(){int t,T=1,n,m;init();scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);printf("Case %d: %d\n",T++,(int)(sum[n]/log10(m))+1);}return 0;}

  Time Limit:2000MS

  Memory Limit:32768KB

  64bit IO Format:%lld & %llu

上一篇 Git 常用命令
下一篇 基于SSM和MySQL实现的疫情数据统计分析系统

文章素材均来源于网络,如有侵权,请联系管理员删除。