# K’th Boom Number

Boom numbers are numbers consisting only of digits 2 and 3. Given an integer k (0<k<=10^7) , display the k-th Boom number.
Examples:

```Input : k = 2
Output: 3

Input : k = 3
Output: 22

Input : k = 100
Output: 322323

Input: k = 1000000
Output: 3332322223223222223
```

Reference: http://www.spoj.com/problems/TSHOW1/
The idea is very simple like Generate Binary Numbers . Here also we use same approach ,
we use queue data structure to solve this problem. First enqueue “2” then “3” these two are first and second boom number respectively. Now set count=2, for each time pop() front of queue and append “2” in poped number and increment count++ if (count==k) then print current Boom number else append “3” in poped number and increment count++ if (count==k) then print current Boom number. Repeat the process untill we reach to K’th Boom number
This approach can be seen as BFS of a tree with root as empty string. Left child of every node has a 2 appended and right child has 3 appended.

Below is the implementation of this idea.

## C++

 `// C++ program to find K'th Boom number` `#include` `using` `namespace` `std;` `typedef` `long` `long` `int` `ll;`   `// This function uses queue data structure to K'th` `// Boom number` `void`  `boomNumber(ll k)` `{` `    ``// Create an empty queue of strings` `    ``queue q;`   `    ``// Enqueue an empty string` `    ``q.push(``""``);`   `    ``// counter for K'th element` `    ``ll count = 0;`   `    ``// This loop checks the value of count to` `    ``// become equal to K when value of count` `    ``// will be equals to k we will print the` `    ``// Boom number` `    ``while` `(count <= k)` `    ``{` `        ``// current Boom number` `        ``string s1 = q.front();`   `        ``// pop front` `        ``q.pop();`   `        ``// Store current Boom number before changing it` `        ``string s2 = s1;`   `        ``// Append "2" to string s1 and enqueue it` `        ``q.push(s1.append(``"2"``));` `        ``count++;`   `        ``// check if count==k` `        ``if` `(count==k)` `        ``{` `            ``cout << s1 << endl; ``// K'th Boom number` `            ``break``;` `        ``}`   `        ``// Append "3" to string s2 and enqueue it.` `        ``// Note that s2 contains the previous front` `        ``q.push(s2.append(``"3"``));` `        ``count++;`   `        ``// check if count==k` `        ``if` `(count==k)` `        ``{` `            ``cout << s2 << endl; ``// K'th Boom number` `            ``break``;` `        ``}` `    ``}` `    ``return` `;` `}`   `// Driver program to test above function` `int` `main()` `{` `    ``ll k = 1000000;` `    ``boomNumber(k);` `    ``return` `0;` `}`

## C#

 `// C# program to find K'th Boom number` `using` `System;` `using` `System.Collections; `   `class` `GFG{`   `// This function uses queue data structure` `// to K'th Boom number` `static` `void` `boomNumber(``long` `k)` `{` `    `  `    ``// Create an empty queue of strings` `    ``Queue q = ``new` `Queue(); ` ` `  `    ``// Enqueue an empty string` `    ``q.Enqueue(``""``);` ` `  `    ``// counter for K'th element` `    ``long` `count = 0;` ` `  `    ``// This loop checks the value of count to` `    ``// become equal to K when value of count` `    ``// will be equals to k we will print the` `    ``// Boom number` `    ``while` `(count <= k)` `    ``{` `        `  `        ``// current Boom number` `        ``string` `s1 = (``string``)q.Dequeue();` ` `  `        ``// Store current Boom number` `        ``// before changing it` `        ``string` `s2 = s1;` ` `  `        ``// Append "2" to string s1 and` `        ``// enqueue it` `        ``s1 += ``"2"``;` `        ``q.Enqueue(s1);` `        ``count++;` ` `  `        ``// Check if count==k` `        ``if` `(count == k)` `        ``{` `            `  `            ``// K'th Boom number` `            ``Console.Write(s1); ` `            ``break``;` `        ``}` ` `  `        ``// Append "3" to string s2 and enqueue it.` `        ``// Note that s2 contains the previous front` `        ``s2 += ``"3"``;` `        ``q.Enqueue(s2);` `        ``count++;` ` `  `        ``// Check if count==k` `        ``if` `(count == k)` `        ``{` `            `  `            ``// K'th Boom number` `            ``Console.Write(s2); ` `            ``break``;` `        ``}` `    ``}` `    ``return``;` `}    `   `// Driver code    ` `public` `static` `void` `Main(``string` `[]arg) ` `{` `    ``long` `k = 1000000;` `    `  `    ``boomNumber(k);` `}` `}`   `// This code is contributed by rutvik_56`

Output:

```3332322223223222223
```

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 : rutvik_56

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.