# Find the n-th number made of even digits only

Given a number n, find out the n-th positive number made up of even digits (0, 2, 4, 6, 8) only. Firs few numbers made of even digits are 0, 2, 4, 6, 8, 20, 22, 24…….

Examples :

```Input  : 2
Output : 2
Second number made of 0, 2, 4, 6, 8 is 2

Input  : 10
Output : 28
```

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

Naive Approach
A naive approach is to start from 0 and checking if it is made of only {0, 2, 4, 6, 8} and stop when you find n-th such number.

## C++

 `// Simple C++ program to find ` `// n-th number made of even  ` `// digits only ` `#include ` `using` `namespace` `std; ` ` `  `// function to calculate nth ` `// number made of even digits only ` `int` `findNthEvenDigitNumber(``int` `n ) ` `{ ` `    ``// variable to note how  ` `    ``// many such numbers have  ` `    ``// been found till now ` `    ``int` `count = 0; ` `    ``for` `(``int` `i = 0 ; ; i++) ` `    ``{ ` `        ``int` `curr = i; ` ` `  `        ``// bool variable to check if  ` `        ``// 1, 3, 5, 7, 9 is there or not ` `        ``bool` `isCurrEvenDigit = ``true` `; ` ` `  `        ``// checking each digit  ` `        ``// of the number ` `        ``while` `(curr != 0) ` `        ``{ ` `            ``// If 1, 3, 5, 7, 9 is found  ` `            ``// temp is changed to false ` `            ``if` `(curr % 10 == 1 || curr % 10 == 3 ||  ` `                ``curr % 10 == 5 || curr % 10 == 7 ||  ` `                ``curr % 10 == 9) ` `                ``isCurrEvenDigit = ``false``; ` `            ``curr = curr / 10; ` `        ``} ` ` `  `        ``// temp is true it means that it ` `        ``// does not have 1, 3, 5, 7, 9 ` `        ``if` `(isCurrEvenDigit == ``true``) ` `            ``count++; ` ` `  `        ``// If nth such number is ` `        ``// found return it ` `        ``if` `(count == n) ` `            ``return` `i; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``cout << findNthEvenDigitNumber(2)  ` `         ``<< endl; ` `    ``cout << findNthEvenDigitNumber(10)  ` `         ``<< endl; ` `    ``return` `0; ` `} `

## Java

 `// Simple Java program to ` `// find the n-th number made ` `// of even digits only ` ` `  `class` `GFG ` `{ ` `    ``// function to calculate nth  ` `    ``// number made of even digits only ` `    ``static` `int` `findNthEvenDigitNumber(``int` `n ) ` `    ``{ ` `        ``// variable to note how  ` `        ``// many such numbers have  ` `        ``// been found till now ` `        ``int` `count = ``0``; ` `        ``for` `(``int` `i = ``0` `; ; i++) ` `        ``{ ` `            ``int` `curr = i; ` `     `  `            ``// bool variable to check if  ` `            ``// 1, 3, 5, 7, 9 is there or not ` `            ``boolean` `isCurrEvenDigit = ``true` `; ` `     `  `            ``// checking each digit ` `            ``// of the number ` `            ``while` `(curr != ``0``) ` `            ``{ ` `                ``// If 1, 3, 5, 7, 9 is found  ` `                ``// temp is changed to false ` `                ``if` `(curr % ``10` `== ``1` `|| curr % ``10` `== ``3` `||  ` `                    ``curr % ``10` `== ``5` `|| curr % ``10` `== ``7` `||  ` `                    ``curr % ``10` `== ``9``) ` `                    ``isCurrEvenDigit = ``false``; ` `                ``curr = curr / ``10``; ` `            ``} ` `     `  `            ``// temp is true it means that it ` `            ``// does not have 1, 3, 5, 7, 9 ` `            ``if` `(isCurrEvenDigit == ``true``) ` `                ``count++; ` `     `  `            ``// If nth such number ` `            ``// is found return it ` `            ``if` `(count == n) ` `                ``return` `i; ` `        ``} ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `main (String[] args)  ` `    ``{ ` `        ``System.out.println(findNthEvenDigitNumber(``2``)); ` `        ``System.out.println(findNthEvenDigitNumber(``10``));  ` `    ``} ` `} `

## Python3

 `# Simple Python3 program to find nth  ` `# number made of even digits only ` ` `  `# function to calculate nth number  ` `# made of even digits only ` `def` `findNthEvenDigitNumber(n): ` ` `  `    ``# variable to note how many such  ` `    ``# numbers have been found till now ` `    ``count ``=` `0``; ` `    ``i ``=` `0``; ` `    ``while` `(``True``): ` `     `  `        ``curr ``=` `i; ` ` `  `        ``# bool variable to check if  ` `        ``# 1, 3, 5, 7, 9 is there or not ` `        ``isCurrEvenDigit ``=` `True``; ` ` `  `        ``# checking each digit of the number ` `        ``while` `(curr !``=` `0``): ` `             `  `            ``# If 1, 3, 5, 7, 9 is found ` `            ``# temp is changed to false ` `            ``if` `(curr ``%` `10` `=``=` `1` `or` `curr ``%` `10` `=``=` `3` `or` `                ``curr ``%` `10` `=``=` `5` `or` `curr ``%` `10` `=``=` `7` `or` `                ``curr ``%` `10` `=``=` `9``): ` `                ``isCurrEvenDigit ``=` `False``; ` `            ``curr ``=` `curr ``/``/` `10``; ` ` `  `        ``# temp is true it means that it ` `        ``# does not have 1, 3, 5, 7, 9 ` `        ``if` `(isCurrEvenDigit ``=``=` `True``): ` `            ``count ``+``=` `1``; ` ` `  `        ``# If nth such number is found, ` `        ``# return it ` `        ``if` `(count ``=``=` `n): ` `            ``return` `i; ` `         `  `        ``i ``+``=` `1``; ` ` `  `# Driver Code ` `print``(findNthEvenDigitNumber(``2``)); ` `print``(findNthEvenDigitNumber(``10``)); ` ` `  `# This code is contributed by mits `

## C#

 `// Simple C# program to  ` `// find the n-th number  ` `// made of even digits only ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// function to calculate nth  ` `    ``// number made of even digits only ` `    ``static` `int` `findNthEvenDigitNumber(``int` `n ) ` `    ``{ ` `        ``// variable to note how  ` `        ``// many such numbers have ` `        ``// been found till now ` `        ``int` `count = 0; ` `        ``for` `(``int` `i = 0 ; ; i++) ` `        ``{ ` `            ``int` `curr = i; ` `     `  `            ``// bool variable to check if  ` `            ``// 1, 3, 5, 7, 9 is there or not ` `            ``bool` `isCurrEvenDigit = ``true` `; ` `     `  `            ``// checking each digit  ` `            ``// of the number ` `            ``while` `(curr != 0) ` `            ``{ ` `                ``// If 1, 3, 5, 7, 9 is found ` `                ``// temp is changed to false ` `                ``if` `(curr % 10 == 1 || curr % 10 == 3 ||  ` `                    ``curr % 10 == 5 || curr % 10 == 7 ||  ` `                    ``curr % 10 == 9 ) ` `                    ``isCurrEvenDigit = ``false``; ` `                ``curr = curr / 10; ` `            ``} ` `     `  `            ``// temp is true it means that it ` `            ``// does not have 1, 3, 5, 7, 9 ` `            ``if` `(isCurrEvenDigit == ``true``) ` `                ``count++; ` `     `  `            ``// If nth such number  ` `            ``// is found return it ` `            ``if` `(count == n) ` `                ``return` `i; ` `        ``} ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main ()  ` `    ``{ ` `        ``Console.WriteLine(findNthEvenDigitNumber(2)); ` `        ``Console.WriteLine(findNthEvenDigitNumber(10));  ` `    ``} ` `} ` ` `  `// This article is contributed by vt_m. `

## PHP

 ` `

Output :

```2
28
```

Efficient Approach
We need to find numbers made of 5 digits, 0, 2, 4, 6 and 8. When we convert a number into base 5 number, it will only be made of numbers {0, 1, 2, 3, 4}. It can be clearly seen that each digit in the required digit set {0, 2, 4, 6, 8} is double the digit in the corresponding index of the base-5 digit set. So to find the n-th number made of only even digits follow the below mentioned steps

Step 1: Convert n to n-1 this is done so as to exclude zero.
Step 2: Convert n to 5 base decimal number.
Step 3: Multiply the above found number by 2. This is the required number

## C++

 `// Efficient C++ program to  ` `// find n-th number made of ` `// even digits only ` `#include ` `using` `namespace` `std; ` ` `  `// function to find nth number ` `// made of even digits only ` `int` `findNthEvenDigitNumber(``int` `n) ` `{ ` `    ``// If n=1 return 0 ` `    ``if` `(n == 1) ` `        ``return` `0; ` ` `  `    ``// vector to store the digits  ` `    ``// when converted into base 5 ` `    ``vector< ``int``> v; ` ` `  `    ``// Reduce n to n-1 to exclude 0 ` `    ``n = n - 1; ` `  `  `    ``// Reduce n to base 5  ` `    ``// number and store digits ` `    ``while` `(n > 0) ` `    ``{ ` `        ``// pushing the digits ` `        ``// into vector ` `        ``v.push_back(n % 5); ` `        ``n = n / 5; ` `    ``} ` ` `  `    ``// variable to represent the  ` `    ``// number after converting it  ` `    ``// to base 5. Since the digits  ` `    ``// are be in reverse order,  ` `    ``// we traverse vector from back ` `    ``int` `result = 0; ` `    ``for` `(``int` `i = v.size() - 1; i >= 0; i--) ` `    ``{ ` `        ``result = result * 10; ` `        ``result = result + v[i]; ` `    ``} ` ` `  `    ``// return 2*result (to convert  ` `    ``// digits 0, 1, 2, 3, 4 to  ` `    ``// 0, 2, 4, 6, 8. ` `    ``return` `2*result; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``cout << findNthEvenDigitNumber(2)  ` `         ``<< endl; ` `    ``cout << findNthEvenDigitNumber(10)  ` `         ``<< endl; ` `    ``return` `0; ` `} `

## Java

 `import` `java.util.*; ` `// Efficient Java program to  ` `// find n-th number made of ` `// even digits only ` ` `  `class` `GFG { ` ` `  `// function to find nth number ` `// made of even digits only ` `    ``static` `int` `findNthEvenDigitNumber(``int` `n) { ` `        ``// If n=1 return 0 ` `        ``if` `(n == ``1``) { ` `            ``return` `0``; ` `        ``} ` ` `  `        ``// vector to store the digits  ` `        ``// when converted into base 5 ` `        ``Vector< Integer> v = ``new` `Vector<>(); ` ` `  `        ``// Reduce n to n-1 to exclude 0 ` `        ``n = n - ``1``; ` ` `  `        ``// Reduce n to base 5  ` `        ``// number and store digits ` `        ``while` `(n > ``0``) { ` `            ``// pushing the digits ` `            ``// into vector ` `            ``v.add(n % ``5``); ` `            ``n = n / ``5``; ` `        ``} ` ` `  `        ``// variable to represent the  ` `        ``// number after converting it  ` `        ``// to base 5. Since the digits  ` `        ``// are be in reverse order,  ` `        ``// we traverse vector from back ` `        ``int` `result = ``0``; ` `        ``for` `(``int` `i = v.size() - ``1``; i >= ``0``; i--) { ` `            ``result = result * ``10``; ` `            ``result = result + v.get(i); ` `        ``} ` ` `  `        ``// return 2*result (to convert  ` `        ``// digits 0, 1, 2, 3, 4 to  ` `        ``// 0, 2, 4, 6, 8. ` `        ``return` `2` `* result; ` `    ``} ` ` `  `// Driver Code ` `    ``public` `static` `void` `main(String[] args) { ` `        ``System.out.println(findNthEvenDigitNumber(``2``)); ` `        ``System.out.println(findNthEvenDigitNumber(``10``)); ` `    ``} ` `} ` `// This code is contributed by PrinciRaj1992 `

## Python 3

 `# Efficient Python 3 program to find n-th  ` `# number made of even digits only ` ` `  `# function to find nth number made of  ` `# even digits only  ` `def` `findNthEvenDigitNumber( n): ` ` `  `    ``# If n = 1 return 0 ` `    ``if` `(n ``=``=` `1``): ` `        ``return` `0` ` `  `    ``# vector to store the digits  ` `    ``# when converted into base 5 ` `    ``v ``=` `[] ` ` `  `    ``# Reduce n to n-1 to exclude 0 ` `    ``n ``=` `n ``-` `1` ` `  `    ``# Reduce n to base 5 number and ` `    ``# store digits ` `    ``while` `(n > ``0``): ` `         `  `        ``# pushing the digits into vector ` `        ``v.append(n ``%` `5``) ` `        ``n ``=` `n ``/``/` `5` ` `  `    ``# variable to represent the number   ` `    ``# after converting it to base 5.  ` `    ``# Since the digits are be in reverse ` `    ``# order, we traverse vector from back ` `    ``result ``=` `0` `    ``for` `i ``in` `range``(``len``(v) ``-` `1``, ``-``1``, ``-``1``): ` `        ``result ``=` `result ``*` `10` `        ``result ``=` `result ``+` `v[i] ` ` `  `    ``# return 2*result (to convert  ` `    ``# digits 0, 1, 2, 3, 4 to  ` `    ``# 0, 2, 4, 6, 8. ` `    ``return` `2` `*` `result ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"``: ` `     `  `    ``print``(findNthEvenDigitNumber(``2``)) ` `    ``print``(findNthEvenDigitNumber(``10``)) ` ` `  `# This code is contributed by ita_c `

## C#

 `// Efficient C# program to  ` `// find n-th number made of ` `// even digits only  ` `using` `System; ` `using` `System.Collections; ` ` `  `class` `GFG { ` ` `  `    ``// function to find nth number ` `    ``// made of even digits only ` `    ``static` `int` `findNthEvenDigitNumber(``int` `n)  ` `    ``{ ` `        ``// If n=1 return 0 ` `        ``if` `(n == 1)  ` `        ``{ ` `            ``return` `0; ` `        ``} ` ` `  `        ``// vector to store the digits  ` `        ``// when converted into base 5 ` `        ``ArrayList v = ``new` `ArrayList(); ` ` `  `        ``// Reduce n to n-1 to exclude 0 ` `        ``n = n - 1; ` ` `  `        ``// Reduce n to base 5  ` `        ``// number and store digits ` `        ``while` `(n > 0)  ` `        ``{ ` `            ``// pushing the digits ` `            ``// into vector ` `            ``v.Add(n % 5); ` `            ``n = n / 5; ` `        ``} ` ` `  `        ``// variable to represent the  ` `        ``// number after converting it  ` `        ``// to base 5. Since the digits  ` `        ``// are be in reverse order,  ` `        ``// we traverse vector from back ` `        ``int` `result = 0; ` `        ``for` `(``int` `i = v.Count - 1; i >= 0; i--) ` `        ``{ ` `            ``result = result * 10; ` `            ``result = result + (``int``)v[i]; ` `        ``} ` ` `  `        ``// return 2*result (to convert  ` `        ``// digits 0, 1, 2, 3, 4 to  ` `        ``// 0, 2, 4, 6, 8. ` `        ``return` `2 * result; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``Console.WriteLine(findNthEvenDigitNumber(2)); ` `        ``Console.WriteLine(findNthEvenDigitNumber(10)); ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

## PHP

 ` 0) ` `    ``{ ` `        ``// pushing the digits ` `        ``// into vector ` `        ``array_push``(``\$v``, ``\$n` `% 5); ` `        ``\$n` `= (int)(``\$n` `/ 5); ` `    ``} ` ` `  `    ``// variable to represent the number  ` `    ``// after converting it to base 5. ` `    ``// Since the digits are be in  ` `    ``// reverse order, we traverse vector ` `    ``// from back ` `    ``\$result` `= 0; ` `    ``for` `(``\$i` `= ``count``(``\$v``) - 1; ``\$i` `>= 0; ``\$i``--) ` `    ``{ ` `        ``\$result` `= ``\$result` `* 10; ` `        ``\$result` `= ``\$result` `+ ``\$v``[``\$i``]; ` `    ``} ` ` `  `    ``// return 2*result (to convert  ` `    ``// digits 0, 1, 2, 3, 4 to  ` `    ``// 0, 2, 4, 6, 8. ` `    ``return` `2 * ``\$result``; ` `} ` ` `  `// Driver Code ` `echo` `findNthEvenDigitNumber(2) . ``"\n"``;  ` `echo` `findNthEvenDigitNumber(10) . ``"\n"` ` `  `// This code is contributed by mits ` `?> `

Output :

```2
28
```

Time Complexity : O(log5(n))

This article is contributed by Ayush Jha. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

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.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.