Friday 9 December 2016

Bit Manupulatin - Example Explanation

https://www.hackerrank.com/challenges/linkedin-practice-binary-numbers/forum
Other than I/O, all operations stay as it is, in Java. Here's Java version for you :
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in) ;
    int n = scan.nextInt() ;
    scan.close() ;

    int ans = 0 ;
    while (n > 0) {
        n &= (n<<1) ;
        ans += 1 ;
    }
    System.out.println(ans) ;
}

Since you want explanation with an example, I'll explain it with 221 because 13won't help much. Now, binary represention of 221 is 11011101. Visualizing iterations of while-loop using binary clarifies the procedure :
First Iteration :   n            11011101
                    n<<1        110111010
                    n & (n<<1)   10011000

Second Iteration :  n            10011000
                    n<<1        100110000
                    n & (n<<1)      10000

Third Iteration :   n               10000
                    n<<1           100000
                    n & (n<<1)          0
As the above example shows, number of consecutive 1's in n reduce by one in every iteration of while-loop. Thus, counting the iterations, gives the required answer.

No comments:

Post a Comment