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:
- 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.
- Iterate from i = 1 to N + 1.
- If (i & ( i – 1 )) is equal to 0, then simply increment the value of l by 1, where & is the Bitwise AND operator.
- After that, the left shift ans by l and then bitwise OR the result with i.
- After and traversing, print ans as the answer.
Below is the implementation of the above approach:
// 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 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 |
# 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# 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 |
<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> |
27
Time Complexity: O(N)
Auxiliary Space: O(1)