Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 <bits/stdc++.h>
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




<script>
//Javascript program to implement
// the above approach
 
// Function to find the decimal value by
// concatenating the numbers from 1 to N
function concatenatedBinary(n)
{
 
    // Stores count of
    // bits in a number
    var l = 0;
 
    // Stores decimal value by
    // concatenating 1 to N
    var ans = 0;
 
    // Iterate over the range [1, n]
    for (var i = 1; i < n + 1; i++){
 
        // If i is a power of 2
        if ((i & (i - 1)) == 0)
              l += 1;
 
        // Update ans
        ans = parseInt((ans << l) | i);
    }
 
    // Return ans
    return ans;
}
 
 
var n = 3;
// Function Call
document.write(concatenatedBinary(n));
 
//This code is contributed by SoumikMondal
</script>


Output: 

27

 

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



Last Updated : 25 May, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads