Related Articles

# Find the number obtained by concatenating binary representations of all numbers up to N

• Difficulty Level : Hard
• Last Updated : 25 May, 2021

Given an integer N, the task is to find the decimal value of the binary string formed by concatenating the binary representations of all numbers from 1 to N sequentially.

Examples:

Input: N = 12
Output: 118505380540
Explanation: The concatenation results in “1101110010111011110001001101010111100”. The equivalent decimal value is 118505380540.

Input: N = 3
Output: 27
Explanation: In binary, 1, 2, and 3 correspond to “1”, “10”, and “11”. Their concatenation results in “11011”, which corresponds to the decimal value of 27.

Approach: The idea is to iterate over the range [1, N]. For every ith number, concatenate the binary representation of the number i using the Bitwise XOR property. Follow the steps below to solve the problem:

1. Initialize two variables, l, and ans with 0, where l stores the current position of the bit in the final binary string of any ith number and ans will store the final answer.
2. Iterate from i = 1 to N + 1.
3. If (i & ( i – 1 )) is equal to 0, then simply increment the value of l by 1, where & is the Bitwise AND operator.
4. After that, the left shift ans by l and then bitwise OR the result with i.
5. After and traversing, print ans as the answer.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to find the decimal value by``// concatenating the numbers from 1 to N``int` `concatenatedBinary(``int` `n)``{` `    ``// Stores count of``    ``// bits in a number``    ``int` `l = 0;` `    ``// Stores decimal value by``    ``// concatenating 1 to N``    ``int` `ans = 0;` `    ``// Iterate over the range [1, n]``    ``for` `(``int` `i = 1; i < n + 1; i++){` `        ``// If i is a power of 2``        ``if` `((i & (i - 1)) == 0)``              ``l += 1;` `        ``// Update ans``        ``ans = ((ans << l) | i);``    ``}` `    ``// Return ans``    ``return` `ans;``}` `// Driver Code``int` `main()``{``    ``int` `n = 3;` `    ``// Function Call``    ``cout << (concatenatedBinary(n));` `  ``return` `0;``}` `// This code is contributed by mohiy kumar 29`

## Java

 `// Java program for the above approach``class` `GFG``{``    ` `    ``// Function to find the decimal value by``    ``// concatenating the numbers from 1 to N``    ``static` `int` `concatenatedBinary(``int` `n)``    ``{``    ` `        ``// Stores count of``        ``// bits in a number``        ``int` `l = ``0``;``    ` `        ``// Stores decimal value by``        ``// concatenating 1 to N``        ``int` `ans = ``0``;``    ` `        ``// Iterate over the range [1, n]``        ``for` `(``int` `i = ``1``; i < n + ``1``; i++){``    ` `            ``// If i is a power of 2``            ``if` `((i & (i - ``1``)) == ``0``)``                  ``l += ``1``;``    ` `            ``// Update ans``            ``ans = ((ans << l) | i);``        ``}``    ` `        ``// Return ans``        ``return` `ans;``    ``}``    ` `    ``// Driver Code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `n = ``3``;``    ` `        ``// Function Call``        ``System.out.println(concatenatedBinary(n));``    ``}``}` `// This code is contributed by AnkThon`

## Python3

 `# Python program for the above approach` `# Function to find the decimal value by``# concatenating the numbers from 1 to N``def` `concatenatedBinary(n):` `    ``# Stores count of``    ``# bits in a number``    ``l ``=` `0` `    ``# Stores decimal value by``    ``# concatenating 1 to N``    ``ans ``=` `0` `    ``# Iterate over the range [1, n]``    ``for` `i ``in` `range``(``1``, n ``+` `1``):` `        ``# If i is a power of 2``        ``if` `i & (i ``-` `1``) ``=``=` `0``:` `            ``# Update l``            ``l ``+``=` `1` `        ``# Update ans``        ``ans ``=` `((ans << l) | i)` `    ``# Return ans``    ``return``(ans)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``n ``=` `3` `    ``# Function Call``    ``print``(concatenatedBinary(n))`

## C#

 `// C# program to implement``// the above approach ``using` `System;``class` `GFG``{``    ` `    ``// Function to find the decimal value by``    ``// concatenating the numbers from 1 to N``    ``static` `int` `concatenatedBinary(``int` `n)``    ``{``    ` `        ``// Stores count of``        ``// bits in a number``        ``int` `l = 0;``    ` `        ``// Stores decimal value by``        ``// concatenating 1 to N``        ``int` `ans = 0;``    ` `        ``// Iterate over the range [1, n]``        ``for` `(``int` `i = 1; i < n + 1; i++)``        ``{``    ` `            ``// If i is a power of 2``            ``if` `((i & (i - 1)) == 0)``                  ``l += 1;``    ` `            ``// Update ans``            ``ans = ((ans << l) | i);``        ``}``    ` `        ``// Return ans``        ``return` `ans;``    ``}``    ` `    ``// Driver Code``    ``public` `static` `void` `Main ()``    ``{``        ``int` `n = 3;``    ` `        ``// Function Call``        ``Console.WriteLine(concatenatedBinary(n));``    ``}``}` `// This code is contributed by sanjoy_62`

## Javascript

 ``
Output:
`27`

Time Complexity: O(N)
Auxiliary Space: O(1)

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. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course. In case you are prepared, test your skills using TCS, Wipro, Amazon. GoogleE-Litmus and Microsoft Test Serieses.

My Personal Notes arrow_drop_up