LightOJ-1045 Digits of factorial
Time Limit: 2000MS |
Memory Limit: 32768KB |
64bit IO Format: %lld &%llu |
Submit Status Description Factorial of an integer was 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 is 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 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 is begins with the integers n (0≤n≤106) and Base (2≤base≤1000). Both of these integers would be a given in decimal. Output For each case of input, you had 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:18,488,885 Case 5:1 Source problem Setter:jane Alam Jan//Test instructions: Enter n,m to give you a number n allows you to convert the number of the factorial of N to the number of M-binary digits. Idea: Log (a) (b) =log (c) (b)/log (c) (a) using logarithmic commutation formula #include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#define N 1000010
using 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;
} |