# Find n’th number in a number system with only 3 and 4

Given a number system with only 3 and 4. Find the nth number in the number system. First few numbers in the number system are: 3, 4, 33, 34, 43, 44, 333, 334, 343, 344, 433, 434, 443, 444, 3333, 3334, 3343, 3344, 3433, 3434, 3443, 3444, …

Source: Zoho Interview

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

We can generate all numbers with i digits using the numbers with (i-1) digits. The idea is to first add a ‘3’ as prefix in all numbers with (i-1) digit, then add a ‘4’. For example, the numbers with 2 digits are 33, 34, 43 and 44. The numbers with 3 digits are 333, 334, 343, 344, 433, 434, 443 and 444 which can be generated by first adding a 3 as prefix, then 4.

Following are detailed steps.

```1) Create an array 'arr[]' of strings size n+1.
2) Initialize arr as empty string. (Number with 0 digits)
3) Do following while array size is smaller than or equal to n
.....a) Generate numbers by adding a 3 as prefix to the numbers generated
in previous iteration.  Add these numbers to arr[]
.....a) Generate numbers by adding a 4 as prefix to the numbers generated
in previous iteration. Add these numbers to arr[]
```

Thanks to kaushik Lele for suggesting this idea in a comment here. Following is C++ implementation for the same.

## C/C++

 `// C++ program to find n'th number in a number system with only 3 and 4 ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find n'th number in a number system with only 3 and 4 ` `void` `find(``int` `n) ` `{ ` `    ``// An array of strings to store first n numbers. arr[i] stores i'th number ` `    ``string arr[n+1]; ` `    ``arr = ``""``; ``// arr stores the empty string (String with 0 digits) ` ` `  `    ``// size indicates number of current elements in arr[]. m indicates ` `    ``// number of elements added to arr[] in previous iteration. ` `    ``int` `size = 1, m = 1; ` ` `  `    ``// Every iteration of following loop generates and adds 2*m numbers to ` `    ``// arr[] using the m numbers generated in previous iteration. ` `    ``while` `(size <= n) ` `    ``{ ` `        ``// Consider all numbers added in previous iteration, add a prefix ` `        ``// "3" to them and add new numbers to arr[] ` `        ``for` `(``int` `i=0; i

## Java

 `// Java program to find n'th number in a number system with only 3 and 4 ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `    ``// Function to find n'th number in a number system with only 3 and 4 ` `    ``static` `void` `find(``int` `n) ` `    ``{ ` `        ``// An array of strings to store first n numbers. arr[i] stores i'th number ` `        ``String[] arr = ``new` `String[n+``1``]; ` `         `  `        ``// arr stores the empty string (String with 0 digits) ` `        ``arr[``0``] = ``""``;  ` ` `  `        ``// size indicates number of current elements in arr[], m indicates ` `        ``// number of elements added to arr[] in previous iteration ` `        ``int` `size = ``1``, m = ``1``; ` ` `  `        ``// Every iteration of following loop generates and adds 2*m numbers to ` `        ``// arr[] using the m numbers generated in previous iteration ` `        ``while` `(size <= n) ` `        ``{ ` `            ``// Consider all numbers added in previous iteration, add a prefix ` `            ``// "3" to them and add new numbers to arr[] ` `            ``for` `(``int` `i=``0``; i

## Python3

 `# Python3 program to find n'th  ` `# number in a number system  ` `# with only 3 and 4 ` ` `  `# Function to find n'th number in a ` `# number system with only 3 and 4 ` `def` `find(n): ` `     `  `    ``# An array of strings to store  ` `    ``# first n numbers. arr[i] stores  ` `    ``# i'th number ` `    ``arr ``=` `[''] ``*` `(n ``+` `1``); ` `     `  `    ``# arr = ""; # arr stores  ` `    ``# the empty string (String with 0 digits) ` ` `  `    ``# size indicates number of current  ` `    ``# elements in arr[]. m indicates  ` `    ``# number of elements added to arr[] ` `    ``# in previous iteration. ` `    ``size ``=` `1``; ` `    ``m ``=` `1``; ` ` `  `    ``# Every iteration of following ` `    ``# loop generates and adds 2*m  ` `    ``# numbers to arr[] using the m  ` `    ``# numbers generated in previous  ` `    ``# iteration. ` `    ``while` `(size <``=` `n): ` `         `  `        ``# Consider all numbers added  ` `        ``# in previous iteration, add  ` `        ``# a prefix "3" to them and  ` `        ``# add new numbers to arr[] ` `        ``i ``=` `0``;  ` `        ``while``(i < m ``and` `(size ``+` `i) <``=` `n): ` `            ``arr[size ``+` `i] ``=` `"3"` `+` `arr[size ``-` `m ``+` `i]; ` `            ``i ``+``=` `1``; ` ` `  `        ``# Add prefix "4" to numbers of  ` `        ``# previous iteration and add  ` `        ``# new numbers to arr[] ` `        ``i ``=` `0``;  ` `        ``while``(i < m ``and` `(size ``+` `m ``+` `i) <``=` `n): ` `            ``arr[size ``+` `m ``+` `i] ``=` `"4"` `+` `arr[size ``-` `m ``+` `i]; ` `            ``i ``+``=` `1``; ` ` `  `        ``# Update no. of elements added ` `        ``# in previous iteration ` `        ``m ``=` `m << ``1``; ``# Or m = m*2; ` ` `  `        ``# Update size ` `        ``size ``=` `size ``+` `m; ` `    ``print``(arr[n]); ` ` `  `# Driver Code ` `for` `i ``in` `range``(``1``, ``16``): ` `    ``find(i); ` ` `  `# This code is contributed by mits `

## C#

 `// C# program to find n'th number in a ` `// number system with only 3 and 4 ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// Function to find n'th number in a ` `    ``// number system with only 3 and 4 ` `    ``static` `void` `find(``int` `n) ` `    ``{ ` `         `  `        ``// An array of strings to store first ` `        ``// n numbers. arr[i] stores i'th number ` `        ``String[] arr = ``new` `String[n + 1]; ` `         `  `        ``// arr stores the empty string ` `        ``// (String with 0 digits) ` `        ``arr = ``""``;  ` ` `  `        ``// size indicates number of current  ` `        ``// elements in arr[], m indicates ` `        ``// number of elements added to arr[] ` `        ``// in previous iteration ` `        ``int` `size = 1, m = 1; ` ` `  `        ``// Every iteration of following loop ` `        ``// generates and adds 2*m numbers to ` `        ``// arr[] using the m numbers generated ` `        ``// in previous iteration ` `        ``while` `(size <= n) ` `        ``{ ` `            ``// Consider all numbers added in  ` `            ``// previous iteration, add a prefix ` `            ``// "3" to them and add new numbers ` `            ``// to arr[] ` `            ``for` `(``int` `i = 0; i < m &&  ` `                             ``(size + i) <= n; i++) ` `                              `  `                ``arr[size + i] = ``"3"` `+ ` `                               ``arr[size - m + i]; ` ` `  `            ``// Add prefix "4" to numbers of  ` `            ``// previous iteration and add new ` `            ``// numbers to arr[] ` `            ``for` `(``int` `i = 0; i < m &&  ` `                          ``(size + m + i) <= n; i++) ` `                           `  `                ``arr[size + m + i] = ``"4"` `+  ` `                                  ``arr[size - m + i]; ` ` `  `            ``// Update no. of elements added ` `            ``// in previous iteration ` `            ``m = m << 1; ``// Or m = m*2; ` ` `  `            ``// Update size ` `            ``size = size + m; ` `        ``} ` `         `  `        ``Console.WriteLine(arr[n]); ` `    ``} ` `     `  `    ``// Driver program ` `    ``public` `static` `void` `Main ()  ` `    ``{ ` `        ``for` `(``int` `i = 0; i < 16; i++) ` `            ``find(i); ` `    ``} ` `} ` ` `  `// This code is contributed by Sam007. `

## PHP

 ` `

Output:

```3
4
33
34
43
44
333
334
343
344
433
434
443
444
3333```

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

Improved By : Sam007, Mithun Kumar

Article Tags :
Practice Tags :

2

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