Highest power of 2 that divides a number represented in binary

Last Updated : 28 May, 2022

Given binary string str, the task is to find the largest power of 2 that divides the decimal equivalent of the given binary number.

Examples:

Input: str = “100100”
Output:
22 = 4 is the highest power of 2 that divides 36 (100100).
Input: str = “10010”
Output: 1

Approach: Starting from the right, count the number of 0s in the binary representation which is the highest power of 2 which will divide the number.

Below is the implementation of the above approach:

C++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to return the highest power of 2` `// which divides the given binary number` `int` `highestPower(string str, ``int` `len)` `{`   `    ``// To store the highest required power of 2` `    ``int` `ans = 0;`   `    ``// Counting number of consecutive zeros` `    ``// from the end in the given binary string` `    ``for` `(``int` `i = len - 1; i >= 0; i--) {` `        ``if` `(str[i] == ``'0'``)` `            ``ans++;` `        ``else` `            ``break``;` `    ``}`   `    ``return` `ans;` `}`   `// Driver code` `int` `main()` `{` `    ``string str = ``"100100"``;` `    ``int` `len = str.length();` `    ``cout << highestPower(str, len);`   `    ``return` `0;` `}`

Java

 `// Java implementation of the approach` `class` `GFG` `{` `    `  `// Function to return the highest power of 2` `// which divides the given binary number` `static` `int` `highestPower(String str, ``int` `len)` `{`   `    ``// To store the highest required power of 2` `    ``int` `ans = ``0``;`   `    ``// Counting number of consecutive zeros` `    ``// from the end in the given binary string` `    ``for` `(``int` `i = len - ``1``; i >= ``0``; i--) ` `    ``{` `        ``if` `(str.charAt(i) == ``'0'``)` `            ``ans++;` `        ``else` `            ``break``;` `    ``}`   `    ``return` `ans;` `}`   `// Driver code` `public` `static` `void` `main(String[] args)` `{` `    ``String str = ``"100100"``;` `    ``int` `len = str.length();` `    ``System.out.println(highestPower(str, len));` `}` `}`   `// This code is contributed by Code_Mech.`

Python3

 `# Python3 implementation of the approach`   `# Function to return the highest power of 2` `# which divides the given binary number` `def` `highestPower(``str``, length):`   `    ``# To store the highest required power of 2` `    ``ans ``=` `0``;`   `    ``# Counting number of consecutive zeros` `    ``# from the end in the given binary string` `    ``for` `i ``in` `range``(length``-``1``,``-``1``,``-``1``):` `        ``if` `(``str``[i] ``=``=` `'0'``):` `            ``ans``+``=``1``;` `        ``else``:` `            ``break``;` `    ``return` `ans;`   `# Driver code` `def` `main():` `    ``str` `=` `"100100"``;` `    ``length ``=` `len``(``str``);` `    ``print``(highestPower(``str``, length));`   `if` `__name__ ``=``=` `'__main__'``:` `    ``main()`   `# This code contributed by PrinciRaj1992`

C#

 `// C# implementation of the approach` `using` `System;` `    `  `class` `GFG` `{` `    `  `// Function to return the highest power of 2` `// which divides the given binary number` `static` `int` `highestPower(String str, ``int` `len)` `{`   `    ``// To store the highest required power of 2` `    ``int` `ans = 0;`   `    ``// Counting number of consecutive zeros` `    ``// from the end in the given binary string` `    ``for` `(``int` `i = len - 1; i >= 0; i--) ` `    ``{` `        ``if` `(str[i] == ``'0'``)` `            ``ans++;` `        ``else` `            ``break``;` `    ``}`   `    ``return` `ans;` `}`   `// Driver code` `public` `static` `void` `Main(String[] args)` `{` `    ``String str = ``"100100"``;` `    ``int` `len = str.Length;` `    ``Console.WriteLine(highestPower(str, len));` `}` `}`   `/* This code contributed by PrinciRaj1992 */`

PHP

 `= 0; ``\$i``--)` `    ``{ ` `        ``if` `(``\$str``[``\$i``] == ``'0'``) ` `            ``\$ans``++; ` `        ``else` `            ``break``; ` `    ``} `   `    ``return` `\$ans``; ` `} `   `// Driver code ` `\$str` `= ``"100100"``; ` `\$len` `= ``strlen``(``\$str``); ` `echo` `highestPower(``\$str``, ``\$len``); `   `// This code is contributed by Ryuga` `?>`

Javascript

 ``

Output

`2`

Time Complexity: O(n) where n is number of elements in given array. As, we are using a loop to traverse N times so it will cost us O(N) time
Auxiliary Space: O(1), as we are not using any extra space.