# Print a number as string of ‘A’ and ‘B’ in lexicographic order

Given a number N, the task is to print the string of ‘A’ and ‘B’ corresponding to that number.

If we represent all numbers as a string of ‘A’ and ‘B’ as follows,

1 = A 2 = B 3 = AA 4 = AB 5 = BA 6 = BB 7 = AAA 8 = AAB 9 = ABA 10 = ABB ..... ..... 1000000 = BBBABAAAABAABAAAAAB

**Examples:**

Input:N = 30Output:BBBBInput:N = 55Output:BBAAAInput:N = 100Output:BAABAB

**Approach:**

- This representation is a little bit related to binary representation.
- First, we have to find the number of characters required to print the string corresponding to the given number, That is the length of the resultant string.
- There are 2 numbers of length 1, 4 numbers of length 2, 8 numbers of length 3 and so on…
- Therefore, k length string of ‘A’ and ‘B’ can represent pow(2, k) numbers from (pow(2, k)-2)+1 to pow(2, k+1)-2, that is AA…A (k times) to BB…B (k times).
- Therefore, for printing the corresponding string, first, calculate the length of the string, let it be k. Now calculate,
N = M - (pow(2, k)-2);

- Now run the following loop to print the corresponding string.
while (k>0) { num = pow(2, k-1); if (num >= N) cout <<"A"; else{ cout <<"B"; N -= num; } k--; }

Below is the implementation of the above approach:

`// C++ program to implement the above approach ` ` ` `#include <cmath> ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `// Function to calculate number of characters ` `// in corresponding string of 'A' and 'B' ` `int` `no_of_characters(` `int` `M) ` `{ ` ` ` ` ` `// Since the minimum number ` ` ` `// of characters will be 1 ` ` ` `int` `k = 1; ` ` ` ` ` `// Calculating number of characters ` ` ` `while` `(` `true` `) { ` ` ` ` ` `// Since k length string can ` ` ` `// represent at most pow(2, k+1)-2 ` ` ` `// that is if k = 4, it can ` ` ` `// represent at most pow(2, 4+1)-2 = 30 ` ` ` `// so we have to calculate the ` ` ` `// length of the corresponding string ` ` ` `if` `(` `pow` `(2, k + 1) - 2 < M) ` ` ` `k++; ` ` ` `else` ` ` `break` `; ` ` ` `} ` ` ` ` ` `// return the length of ` ` ` `// the corresponding string ` ` ` `return` `k; ` `} ` ` ` `// Function to print corresponding ` `// string of 'A' and 'B' ` `void` `print_string(` `int` `M) ` `{ ` ` ` `int` `k, num, N; ` ` ` ` ` `// Find length of string ` ` ` `k = no_of_characters(M); ` ` ` ` ` `// Since the first number that can be represented ` ` ` `// by k length string will be (pow(2, k)-2)+1 ` ` ` `// and it will be AAA...A, k times, ` ` ` `// therefore, N will store that ` ` ` `// how much we have to print ` ` ` `N = M - (` `pow` `(2, k) - 2); ` ` ` ` ` `// At a particular time, ` ` ` `// we have to decide whether ` ` ` `// we have to print 'A' or 'B', ` ` ` `// this can be check by calculating ` ` ` `// the value of pow(2, k-1) ` ` ` `while` `(k > 0) { ` ` ` `num = ` `pow` `(2, k - 1); ` ` ` ` ` `if` `(num >= N) ` ` ` `cout << ` `"A"` `; ` ` ` `else` `{ ` ` ` `cout << ` `"B"` `; ` ` ` `N -= num; ` ` ` `} ` ` ` `k--; ` ` ` `} ` ` ` ` ` `// Print new line ` ` ` `cout << endl; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` ` ` `int` `M; ` ` ` ` ` `M = 30; ` ` ` `print_string(M); ` ` ` ` ` `M = 55; ` ` ` `print_string(M); ` ` ` ` ` `M = 100; ` ` ` `print_string(M); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

BBBB BBAAA BAABAB

## Recommended Posts:

- Print all permutations in sorted (lexicographic) order
- Find a string in lexicographic order which is in between given two strings
- Generating distinct subsequences of a given string in lexicographic order
- Power Set in Lexicographic order
- Print all the combinations of a string in lexicographical order
- Print words of a string in reverse order
- Print all the palindromic permutations of given string in alphabetic order
- Print all distinct characters of a string in order (3 Methods)
- Print array of strings in sorted order without copying one string into another
- Lexicographic rank of a string
- Lexicographic rank of a string using STL
- Lexicographic rank of a string with duplicate characters
- Print number in ascending order which contains 1, 2 and 3 in their digits.
- Sort a string according to the order defined by another string
- Print characters and their frequencies in order of occurrence

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.