Skip to content
Related Articles

Related Articles

Improve Article
Number of digits in N factorial to the power N
  • Difficulty Level : Easy
  • Last Updated : 03 Mar, 2021

Given a positive integer N, we have to find the total number of digits in the factorial of N raised to the power N, i.e, (N!)^N
Examples: 
 

Input: 4
Output: 6
Explanations: (4!)^4 = (24)^4 = 331776. 
Total number of digits in 331776 is 6.
Input: 5
Output: 11
Explanations: (5!)^5 = (120)^5 = 24883200000
Total number of digits in 24883200000 is 11.
Input: 2
Output: 1
Input: 1000
Output: 2567605

The idea of the solution is described below.
 

 

Brute force method: By brute force, we can simply compute N! in O(N) time and then multiply it n times but that will be a very slow method and would exceed both time and space because (N!)^N   would be a huge number. 
  
Efficient method: 
Let’s look at it more closely. We can break (N!)^N into simpler terms which are easy to compute. By taking common logarithm, 
  
we get N * log10(N!).
  
and we know, N! = 1 * 2 * 3 * 4 *....* N.
Therefore we can reduce further. 
  
N * log10(N!)
  
= N * log10(1 * 2 * 3 * 4 *....* N)
  
= N * [log10 (1) + log10 (2) + log10 (3) + .... + log10 (N)]
Now we can compute the answer easily in O(N) time and without space limit exceeding. 
  
So why is a valid answer to the problem? 
We know that the total number of digits in a number N whose base is 10 can be easily found by taking ceil(log10 (N)). That is exactly done in the approach described above. 
 

The code implementation of the above idea is given below. 
 



C++




// CPP program to find count of digits in N
// factorial raised to N
#include <bits/stdc++.h>
using namespace std;
 
int countDigits(int n)
{
    // we take sum of logarithms as explained
    // in the approach
    double ans = 0;
    for (int i = 1; i <= n; i++)
        ans += log10(i);
 
    // multiply the result with n
    ans = ans * n;
    return 1 + floor(ans);
}
 
int main()
{
    int n = 4;
    cout << countDigits(n) << "\n";
    return 0;
}

Java




// Java program to find
// count of digits in N
// factorial raised to N
import java.io.*;
 
class GFG
{
static int countDigits(int n)
{
    // we take sum of logarithms
    // as explained in the approach
    double ans = 0;
    for (int i = 1; i <= n; i++)
        ans += Math.log10(i);
 
    // multiply the
    // result with n
    ans = ans * n;
    return 1 + (int)Math.floor(ans);
}
 
// Driver Code
public static void main (String[] args)
{
    int n = 4;
    System.out.println(
               countDigits(n) + "\n");
}
}
 
// This code is contributed
// by anuj_67.

Python3




# python3 program to find count of digits in N
# factorial raised to N
 
import math
  
def countDigits( n):
 
    # we take sum of logarithms as explained
    # in the approach
    ans = 0
    for i in range (1,n+1):
        ans += math.log10(i)
  
    #multiply the result with n
    ans = ans * n
    return 1 + math.floor(ans)
 
  
if __name__ == "__main__":
 
    n = 4
    print (countDigits(n))

C#




// C# program to find
// count of digits in N
// factorial raised to N
using System;
 
class GFG
{
static int countDigits(int n)
{
    // we take sum of logarithms
    // as explained in the approach
    double ans = 0;
    for (int i = 1; i <= n; i++)
        ans += Math.Log10(i);
 
    // multiply the
    // result with n
    ans = ans * n;
    return 1 + (int)Math.Floor(ans);
}
 
// Driver Code
public static void Main ()
{
    int n = 4;
    Console.WriteLine(
            countDigits(n) + "\n");
}
}
 
// This code is contributed
// by anuj_67.

PHP




<?php
// PHP program to find count of
// digits in N factorial raised to N
function countDigits ($n)
{
    // we take sum of logarithms as
    // explained in the approach
    $ans = 0;
    for ($i = 1; $i <= $n; $i++)
        $ans += log10($i);
 
    // multiply the result with n
    $ans = $ans * $n;
    return 1 + floor($ans);
}
 
// Driver Code
$n = 4;
echo countDigits($n) , "\n";
 
// This code is contributed
// by jit_t   
?>

Javascript




<script>
 
// Javascript program to find count of digits in N
// factorial raised to N
 
function countDigits(n)
{
    // we take sum of logarithms as explained
    // in the approach
    let ans = 0;
    for (let i = 1; i <= n; i++)
        ans += Math.log10(i);
 
    // multiply the result with n
    ans = ans * n;
    return 1 + Math.floor(ans);
}
 
    let n = 4;
    document.write(countDigits(n) + "<br>");
 
// This code is contributed by Mayank Tyagi
 
</script>
Output: 
6

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live




My Personal Notes arrow_drop_up
Recommended Articles
Page :