Related Articles
Numbers whose factorials end with n zeros
• Difficulty Level : Medium
• Last Updated : 26 Dec, 2018

Given an integer n, we need to find the number of positive integers whose factorial ends with n zeros.

Examples:

```Input : n = 1
Output : 5 6 7 8 9
Explanation: Here, 5! = 120, 6! = 720,
7! = 5040, 8! = 40320 and 9! = 362880.

Input : n = 2
Output : 10 11 12 13 14
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Prerequisite : Trailing zeros in factorial.

Naive approach:We can just iterate through the range of integers and find the number of trailing zeros of all the numbers and print the numbers with n trailing zeros.

Efficient Approach:In this approach we use binary search. Use binary search for all the numbers in the range and get the first number with n trailing zeros. Find all the numbers with m trailing zeros after that number.

## C++

 `// Binary search based CPP program to find``// numbers with n trailing zeros.``#include ``using` `namespace` `std;`` ` `// Function to calculate trailing zeros``int` `trailingZeroes(``int` `n)``{``    ``int` `cnt = 0;``    ``while` `(n > 0) {``        ``n /= 5;``        ``cnt += n;``    ``}``    ``return` `cnt;``}`` ` `void` `binarySearch(``int` `n)``{``    ``int` `low = 0;``    ``int` `high = 1e6; ``// range of numbers`` ` `    ``// binary search for first number with ``    ``// n trailing zeros``    ``while` `(low < high) {``        ``int` `mid = (low + high) / 2;``        ``int` `count = trailingZeroes(mid);``        ``if` `(count < n)``            ``low = mid + 1;``        ``else``            ``high = mid;``    ``}`` ` `    ``// Print all numbers after low with n``    ``// trailing zeros.``    ``vector<``int``> result;``    ``while` `(trailingZeroes(low) == n) {``        ``result.push_back(low);``        ``low++;``    ``}`` ` `    ``// Print result``    ``for` `(``int` `i = 0; i < result.size(); i++) ``        ``cout << result[i] << ``" "``;``}`` ` `// Driver code``int` `main()``{``    ``int` `n = 2;``    ``binarySearch(n);``    ``return` `0;``}`

## Java

 `// Binary search based Java ``// program to find numbers ``// with n trailing zeros.``import` `java.io.*;`` ` `class` `GFG {`` ` `    ``// Function to calculate ``    ``// trailing zeros``    ``static` `int` `trailingZeroes(``int` `n)``    ``{``        ``int` `cnt = ``0``;``        ``while` `(n > ``0``) ``        ``{``            ``n /= ``5``;``            ``cnt += n;``        ``}``        ``return` `cnt;``    ``}`` ` `    ``static` `void` `binarySearch(``int` `n)``    ``{``        ``int` `low = ``0``;``         ` `        ``// range of numbers``        ``int` `high = ``1000000``;`` ` `        ``// binary search for first number ``        ``// with n trailing zeros``        ``while` `(low < high) {``            ``int` `mid = (low + high) / ``2``;``            ``int` `count = trailingZeroes(mid);``            ``if` `(count < n)``                ``low = mid + ``1``;``            ``else``                ``high = mid;``        ``}`` ` `        ``// Print all numbers after low ``        ``// with n trailing zeros.``        ``int` `result[] = ``new` `int``[``1000``];``        ``int` `k = ``0``;``        ``while` `(trailingZeroes(low) == n) {``            ``result[k] = low;``            ``k++;``            ``low++;``        ``}`` ` `        ``// Print result``        ``for` `(``int` `i = ``0``; i < k; i++)``            ``System.out.print(result[i] + ``" "``);``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `n = ``3``;``        ``binarySearch(n);``    ``}``}`` ` `// This code is contributed ``// by Nikita Tiwari.`

## Python3

 `# Binary search based Python3 code to find``# numbers with n trailing zeros.`` ` `# Function to calculate trailing zeros``def` `trailingZeroes( n ):``    ``cnt ``=` `0``    ``while` `n > ``0``:``        ``n ``=``int``(n``/``5``)``        ``cnt ``+``=` `n``    ``return` `cnt`` ` `def` `binarySearch( n ):``    ``low ``=` `0``    ``high ``=` `1e6`  `# range of numbers``     ` `    ``# binary search for first number with``    ``# n trailing zeros``    ``while` `low < high:``        ``mid ``=` `int``((low ``+` `high) ``/` `2``)``        ``count ``=` `trailingZeroes(mid)``        ``if` `count < n:``            ``low ``=` `mid ``+` `1``        ``else``:``            ``high ``=` `mid``             ` `    ``# Print all numbers after low with n``    ``# trailing zeros.``    ``result ``=` `list``()``    ``while` `trailingZeroes(low) ``=``=` `n:``        ``result.append(low)``        ``low``+``=``1``     ` `    ``# Print result``    ``for` `i ``in` `range``(``len``(result)):``        ``print``(result[i],end``=``" "``)`` ` `# Driver code``n ``=` `2``binarySearch(n)`` ` `# This code is contributed by "Sharad_Bhardwaj".`

## C#

 `// Binary search based C# ``// program to find numbers ``// with n trailing zeros.``using` `System;`` ` `class` `GFG {`` ` `    ``// Function to calculate ``    ``// trailing zeros``    ``static` `int` `trailingZeroes(``int` `n)``    ``{``        ``int` `cnt = 0;``         ` `        ``while` `(n > 0) ``        ``{``            ``n /= 5;``            ``cnt += n;``        ``}``         ` `        ``return` `cnt;``    ``}`` ` `    ``static` `void` `binarySearch(``int` `n)``    ``{``        ``int` `low = 0;``         ` `        ``// range of numbers``        ``int` `high = 1000000;`` ` `        ``// binary search for first number ``        ``// with n trailing zeros``        ``while` `(low < high) {``            ``int` `mid = (low + high) / 2;``            ``int` `count = trailingZeroes(mid);``             ` `            ``if` `(count < n)``                ``low = mid + 1;``            ``else``                ``high = mid;``        ``}`` ` `        ``// Print all numbers after low ``        ``// with n trailing zeros.``        ``int` `[]result = ``new` `int``;``        ``int` `k = 0;``        ``while` `(trailingZeroes(low) == n) {``            ``result[k] = low;``            ``k++;``            ``low++;``        ``}`` ` `        ``// Print result``        ``for` `(``int` `i = 0; i < k; i++)``            ``Console.Write(result[i] + ``" "``);``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 2;``         ` `        ``binarySearch(n);``    ``}``}`` ` `// This code is contributed by vt_m.`

## PHP

 ` 0) ``    ``{``        ``\$n` `= ``intval``(``\$n` `/ 5);``        ``\$cnt` `+= ``\$n``;``    ``}``    ``return` `\$cnt``;``}`` ` `function` `binarySearch(``\$n``)``{``    ``\$low` `= 0;``    ``\$high` `= 1e6; ``// range of numbers`` ` `    ``// binary search for first number ``    ``// with n trailing zeros``    ``while` `(``\$low` `< ``\$high``)``    ``{``        ``\$mid` `= ``intval``((``\$low` `+ ``\$high``) / 2);``        ``\$count` `= trailingZeroes(``\$mid``);``        ``if` `(``\$count` `< ``\$n``)``            ``\$low` `= ``\$mid` `+ 1;``        ``else``            ``\$high` `= ``\$mid``;``    ``}`` ` `    ``// Print all numbers after low with n``    ``// trailing zeros.``    ``\$result` `= ``array``();``    ``while` `(trailingZeroes(``\$low``) == ``\$n``)``    ``{``        ``array_push``(``\$result``, ``\$low``);``        ``\$low``++;``    ``}`` ` `    ``// Print result``    ``for` `(``\$i` `= 0; ``         ``\$i` `< sizeof(``\$result``); ``\$i``++) ``        ``echo` `\$result``[``\$i``] . ``" "``;``}`` ` `// Driver code``\$n` `= 2;``binarySearch(``\$n``);`` ` `// This code is contributed by Ita_c``?>`

Output:
```10 11 12 13 14
```

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.

My Personal Notes arrow_drop_up