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