LightOJ - 1045 Digits of Factorial
2016-08-18 23:34
519 查看
题目:
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 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
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
因为T很大,N也很大,所以要用数组存结果,然后不停调用。
没有考虑logg
/log(base)刚好是整数的情况,这个地方可以优化一下。
这个题目,如果用斯特林公式做的话,更快。
点击打开链接
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 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
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
因为T很大,N也很大,所以要用数组存结果,然后不停调用。
#include<iostream> #include<stdio.h> #include<cmath> using namespace std; double logg[1000001]; int main() { int t, n, base; cin >> t; logg[0] = 0; for (int i = 1; i < 1000001; i++)logg[i] += logg[i - 1] + log(i); for (int i = 1; i <= t; i++) { scanf("%d%d", &n, &base); printf("Case %d: %d\n", i, int(logg[n]/log(base)) + 1); } return 0; }
没有考虑logg
/log(base)刚好是整数的情况,这个地方可以优化一下。
这个题目,如果用斯特林公式做的话,更快。
点击打开链接
相关文章推荐
- LightOJ 1045 Digits of Factorial(大数进制)
- lightOJ 1045 Digits of Factorial (数位计数)
- 【LightOJ】1045 - Digits of Factorial(数论)
- LightOJ 1045 Digits of Factorial
- lightoj 1045 - Digits of Factorial (数学-log运用--阶乘进制位数)
- LightOJ1045 Digits of Factorial 求n的阶乘在k进制下的位数
- lightoj 1045 - Digits of Factorial 取对数
- LightOJ 1045 Digits of Factorial
- lightoj1045 - Digits of Factorial
- lightoj 1045 - Digits of Factorial 【数学】
- LightOJ 1045 I - Digits of Factorial
- LightOJ 1045 - Digits of Factorial 简单数论
- LightOJ 1045 Digits of Factorial
- LightOJ 1045 Digits of Factorial
- lightoj 1045 - Digits of Factorial
- LIGHTOJ 1045 - Digits of Factorial 【阶乘取对数】
- Light-oj-1045 lightoj1045 - Digits of Factorial (N!不同进制的位数)
- lightoj1045 - Digits of Factorial
- Lightoj1045 Digits of Factorial(数论)
- 【LightOJ 1045 Digits of Factorial】