Related Articles
Find the number obtained by concatenating binary representations of all numbers up to N
• Last Updated : 12 Jan, 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 corresponds 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, left shift ans by l and then bitwise OR the result with i.
5. After 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`
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 and Microsoft Test Serieses.

My Personal Notes arrow_drop_up