Prerequisite: Bitset function in STL library
Given a number N, the task is to find the absolute difference of the number of set and unset bits of this given number.
Examples:
Input: N = 14
Output: 2
Explanation:
Binary representation of 14 is “1110”.
Here the number of set bits is 3 and the number of unset bits is 1.
Therefore, the absolute difference is 2.Input: N = 56
Output: 0
Explanation:
Binary representation of 56 is “110100”.
Here the number of set bits is 3 and the number of unset bits is 3.
Therefore, the absolute difference 0.
Approach:
- Count the total number of bits in the binary representation of the given number.
- Use bitset function defined in the STL library, to count the number of set bits efficiently.
- Then, we will subtract the set bits from the total number of bits to get the number of unset bits.
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Max size of bitset const int sz = 64;
// Function to return the total bits // in the binary representation // of a number int totalbits( int N)
{ return ( int )(1 + log2(N));
} // Function to calculate the // absolute difference int absoluteDifference( int N)
{ bitset<sz> arr(N);
int total_bits = totalbits(N);
// Calculate the number of
// set bits
int set_bits = arr.count();
// Calculate the number of
// unset bits
int unset_bits = total_bits
- set_bits;
int ans = abs (set_bits
- unset_bits);
// Return the absolute difference
return ans;
} // Driver Code int main()
{ // Given Number
int N = 14;
// Function Call
cout << absoluteDifference(N);
return 0;
} |
// Java program for the above approach import java.util.*;
class GFG{
// Max size of bitset static final int sz = 64 ;
// Function to return the total bits // in the binary representation // of a number static int totalbits( int N)
{ return ( 1 + ( int )(Math.log(N) /
Math.log( 2 )));
} // Function to calculate the // absolute difference static int absoluteDifference( int N)
{ int arr = N;
int total_bits = totalbits(N);
// Calculate the number of
// set bits
int set_bits = countSetBits(arr);
// Calculate the number of
// unset bits
int unset_bits = total_bits - set_bits;
int ans = Math.abs(set_bits - unset_bits);
// Return the absolute difference
return ans;
} static int countSetBits( int n)
{ int count = 0 ;
while (n > 0 )
{
n &= (n - 1 );
count++;
}
return count;
} // Driver code public static void main(String[] args)
{ // Given Number
int N = 14 ;
// Function Call
System.out.println(absoluteDifference(N));
} } // This code is contributed by offbeat |
# Python3 program for the above approach import math
# Max size of bitset sz = 64
# Function to return the total bits # in the binary representation # of a number def totalbits(N) :
return ( 1 + ( int )(math.log(N) / math.log( 2 )))
# Function to calculate the # absolute difference def absoluteDifference(N) :
arr = N
total_bits = totalbits(N)
# Calculate the number of
# set bits
set_bits = countSetBits(arr)
# Calculate the number of
# unset bits
unset_bits = total_bits - set_bits
ans = abs (set_bits - unset_bits)
# Return the absolute difference
return ans
def countSetBits(n) :
count = 0
while (n > 0 ) :
n = n & (n - 1 )
count + = 1
return count
# Given Number N = 14
# Function Call print (absoluteDifference(N))
# This code is contributed by divyesh072019 |
// C# program for the above approach using System;
class GFG{
// Function to return the total bits
// in the binary representation
// of a number
static int totalbits( int N)
{
return (1 + ( int )(Math.Log(N) /
Math.Log(2)));
}
// Function to calculate the
// absolute difference
static int absoluteDifference( int N)
{
int arr = N;
int total_bits = totalbits(N);
// Calculate the number of
// set bits
int set_bits = countSetBits(arr);
// Calculate the number of
// unset bits
int unset_bits = total_bits - set_bits;
int ans = Math.Abs(set_bits - unset_bits);
// Return the absolute difference
return ans;
}
static int countSetBits( int n)
{
int count = 0;
while (n > 0)
{
n &= (n - 1);
count++;
}
return count;
}
// Driver code
static void Main() {
// Given Number
int N = 14;
// Function Call
Console.WriteLine(absoluteDifference(N));
}
} // This code is contributed by divyeshrabadiya07 |
<script> // Javascript program for the above approach
// Function to return the total bits
// in the binary representation
// of a number
function totalbits(N)
{
return (1 + parseInt(Math.log(N) / Math.log(2), 10));
}
// Function to calculate the
// absolute difference
function absoluteDifference(N)
{
let arr = N;
let total_bits = totalbits(N);
// Calculate the number of
// set bits
let set_bits = countSetBits(arr);
// Calculate the number of
// unset bits
let unset_bits = total_bits - set_bits;
let ans = Math.abs(set_bits - unset_bits);
// Return the absolute difference
return ans;
}
function countSetBits(n)
{
let count = 0;
while (n > 0)
{
n &= (n - 1);
count++;
}
return count;
}
// Given Number
let N = 14;
// Function Call
document.write(absoluteDifference(N));
</script> |
2
Time Complexity: O(log N)
Auxiliary Space: O(1) as constant space for variables and bitset arr is used