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 `13`

won'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