Count of total bits toggled/flipped in binary representation of 0 to N
Last Updated :
31 Mar, 2021
Given an integer N, the task is to find the total number of bits toggled to obtain all numbers from 0 to N sequentially.
Examples:
Input: N = 5
Output: 8
Explanation:
Let’s represent numbers from 0 to 5 in binary:
000 -> 001 : 1 bit toggled
001 -> 010 : 2 bits toggled
010 -> 011 : 1 bit toggled
011 -> 100 : 3 bits toggled
100 -> 101 : 1 bit toggled
Hence, 8 bits toggled
Input: N = 1
Output: 1
Approach:
Follow the steps below to solve the problems:
- The following observations need to be made to solve the problem:
The rightmost bit toggles every time.
(000) -> (001) -> (010) -> (011)
So, the contribution of this bit to the count will be N.
The next bit toggles after every 2 numbers.
(000) -> (001) -> (010) -> (011) -> (100)
Hence, the contribution of this bit to the count will be N/2.
- Thus, we can conclude that the i th least significant bit will contribute N/(2 i) to the count of toggles.
- Hence, the sum of N/(2i) where i is in the range [0, log2N], gives the required answer.
- Hence, initialize a variable ans. Add N to ans and update N to N/2. Repeat this process until N becomes 0, to get the final result.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
void solve(ll N)
{
ll ans = 0;
while (N != 0) {
ans += N;
N /= 2;
}
cout << ans << endl;
}
int main()
{
ll N = 5;
solve(N);
return 0;
}
|
Java
class GFG{
static void solve( int N)
{
int ans = 0 ;
while (N != 0 )
{
ans += N;
N /= 2 ;
}
System.out.println(ans);
}
public static void main(String []args)
{
int N = 5 ;
solve(N);
}
}
|
Python3
def solve(N):
ans = 0
while (N ! = 0 ):
ans + = N
N / / = 2
print (ans)
N = 5
solve(N)
|
C#
using System;
class GFG{
static void solve( int N)
{
int ans = 0;
while (N != 0)
{
ans += N;
N /= 2;
}
Console.Write(ans);
}
public static void Main( string []args)
{
int N = 5;
solve(N);
}
}
|
Javascript
<script>
function solve(N)
{
let ans = 0;
while (N != 0)
{
ans += N;
N = parseInt(N / 2, 10);
}
document.write(ans);
}
let N = 5;
solve(N);
</script>
|
Output:
8
Time Complexity: O(log N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...