# Count trailing zeroes in factorial of a number

Given an integer n, write a function that returns count of trailing zeroes in n!.

**Examples :**

Input: n = 5 Output: 1 Factorial of 5 is 120 which has one trailing 0. Input: n = 20 Output: 4 Factorial of 20 is 2432902008176640000 which has 4 trailing zeroes. Input: n = 100 Output: 24

## We strongly recommend that you click here and practice it, before moving on to the solution.

A simple method is to first calculate factorial of n, then count trailing 0s in the result (We can count trailing 0s by repeatedly dividing the factorial by 10 till the remainder is 0).

The above method can cause overflow for a slightly bigger numbers as factorial of a number is a big number (See factorial of 20 given in above examples). The idea is to consider prime factors of a factorial n. A trailing zero is always produced by prime factors 2 and 5. If we can count the number of 5s and 2s, our task is done. Consider the following examples.

**n = 5:** There is one 5 and 3 2s in prime factors of 5! (2 * 2 * 2 * 3 * 5). So count of trailing 0s is 1.

**n = 11:** There are two 5s and three 2s in prime factors of 11! (2 ^{8} * 3^{4} * 5^{2} * 7). So count of trailing 0s is 2.

We can easily observe that the number of 2s in prime factors is always more than or equal to the number of 5s. So if we count 5s in prime factors, we are done. *How to count total number of 5s in prime factors of n!? * A simple way is to calculate floor(n/5). For example, 7! has one 5, 10! has two 5s. It is not done yet, there is one more thing to consider. Numbers like 25, 125, etc have more than one 5. For example if we consider 28!, we get one extra 5 and number of 0s become 6. Handling this is simple, first divide n by 5 and remove all single 5s, then divide by 25 to remove extra 5s and so on. Following is the summarized formula for counting trailing 0s.

Trailing 0s in n! = Count of 5s in prime factors of n! = floor(n/5) + floor(n/25) + floor(n/125) + ....

Following is program based on above formula.

## C++

`// C++ program to count ` `// trailing 0s in n! ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `// Function to return trailing ` `// 0s in factorial of n ` `int` `findTrailingZeros(` `int` `n) ` `{ ` ` ` `// Initialize result ` ` ` `int` `count = 0; ` ` ` ` ` `// Keep dividing n by powers of ` ` ` `// 5 and update count ` ` ` `for` `(` `int` `i = 5; n / i >= 1; i *= 5) ` ` ` `count += n / i; ` ` ` ` ` `return` `count; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `n = 100; ` ` ` `cout << ` `"Count of trailing 0s in "` `<< 100 ` ` ` `<< ` `"! is "` `<< findTrailingZeros(n); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to count ` `// trailing 0s in n! ` `import` `java.io.*; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to return trailing ` ` ` `// 0s in factorial of n ` ` ` `static` `int` `findTrailingZeros(` `int` `n) ` ` ` `{ ` ` ` `// Initialize result ` ` ` `int` `count = ` `0` `; ` ` ` ` ` `// Keep dividing n by powers ` ` ` `// of 5 and update count ` ` ` `for` `(` `int` `i = ` `5` `; n / i >= ` `1` `; i *= ` `5` `) ` ` ` `count += n / i; ` ` ` ` ` `return` `count; ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `int` `n = ` `100` `; ` ` ` `System.out.println(` `"Count of trailing 0s in "` `+ ` ` ` `n +` `"! is "` `+ ` ` ` `findTrailingZeros(n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Pramod Kumar ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to ` `# count trailing 0s ` `# in n! ` ` ` `# Function to return ` `# trailing 0s in ` `# factorial of n ` `def` `findTrailingZeros(n): ` ` ` ` ` `# Initialize result ` ` ` `count ` `=` `0` ` ` ` ` `# Keep dividing n by ` ` ` `# powers of 5 and ` ` ` `# update Count ` ` ` `i` `=` `5` ` ` `while` `(n` `/` `i>` `=` `1` `): ` ` ` `count ` `+` `=` `int` `(n` `/` `i) ` ` ` `i ` `*` `=` `5` ` ` ` ` `return` `int` `(count) ` ` ` `# Driver program ` `n ` `=` `100` `print` `(` `"Count of trailing 0s "` `+` ` ` `"in 100! is"` `,findTrailingZeros(n)) ` ` ` `# This code is contributed by Smitha Dinesh Semwal ` |

*chevron_right*

*filter_none*

## C#

`// C# program to count ` `// trailing 0s in n! ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to return trailing ` ` ` `// 0s in factorial of n ` ` ` `static` `int` `findTrailingZeros(` `int` `n) ` ` ` `{ ` ` ` `// Initialize result ` ` ` `int` `count = 0; ` ` ` ` ` `// Keep dividing n by powers ` ` ` `// of 5 and update count ` ` ` `for` `(` `int` `i = 5; n / i >= 1; i *= 5) ` ` ` `count += n / i; ` ` ` ` ` `return` `count; ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `Main () ` ` ` `{ ` ` ` `int` `n = 100; ` ` ` `Console.WriteLine(` `"Count of trailing 0s in "` `+ ` ` ` `n +` `"! is "` `+ ` ` ` `findTrailingZeros(n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by vt_m ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to count ` `// trailing 0s in n! ` ` ` `// Function to return trailing ` `// 0s in factorial of n ` `function` `findTrailingZeros( ` `$n` `) ` `{ ` ` ` `// Initialize result ` ` ` `$count` `= 0; ` ` ` ` ` `// Keep dividing n by powers ` ` ` `// of 5 and update count ` ` ` `for` `(` `$i` `= 5; ` `$n` `/ ` `$i` `>= 1; ` `$i` `*= 5) ` ` ` `$count` `+= ` `$n` `/ ` `$i` `; ` ` ` ` ` `return` `$count` `; ` `} ` ` ` `// Driver Code ` ` ` `$n` `= 100; ` `echo` `"Count of trailing 0s in "` `, 100, ` ` ` `"! is "` `, findTrailingZeros(` `$n` `); ` ` ` `// This code is contributed by vt_m ` `?> ` |

*chevron_right*

*filter_none*

**Output :**

Count of trailing 0s in 100! is 24

This article is contributed by **Rahul Jain**. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: **DSA Self Paced**. Become industry ready at a student-friendly price.

## Recommended Posts:

- Smallest number with at least n trailing zeroes in factorial
- Golang Program to Count Trailing Zeros in Factorial of a Number
- Number of trailing zeroes in base 16 representation of N!
- Number of trailing zeroes in base B representation of N!
- Count number of trailing zeros in (1^1)*(2^2)*(3^3)*(4^4)*..
- Count number of trailing zeros in Binary representation of a number using Bitset
- Count number of trailing zeros in product of array
- Count of N-digit numbers in base K with no two consecutive zeroes
- Count unique numbers that can be generated from N by adding one and removing trailing zeros
- Number of trailing zeros in N * (N - 2) * (N - 4)*....
- Count digits in a factorial | Set 2
- Count digits in a factorial | Set 1
- Count Divisors of Factorial
- Trailing number of 0s in product of two factorials
- Count factorial numbers in a given range
- Smallest number divisible by n and has at-least k trailing zeros
- Find the smallest number X such that X! contains at least Y trailing zeros.
- Largest number with maximum trailing nines which is less than N and greater than N-D
- Find the last digit when factorial of A divides factorial of B
- Sum of divisors of factorial of a number