# Number of ways to split a binary number such that every part is divisible by 2

Given a binary string **S**, the task is to find the number of ways to split it into parts such that every part is divisible by **2**.

**Examples:**

Input:S = “100”Output:2

There are two ways to split the string:

{“10”, “0”} and {“100”}Input:S = “110”Output:1

**Approach:** One observation is that the string can only be split after a **0**. Thus, count the number of zeros in the string. Let’s call this count **c_zero**. Assuming the case when the string is even, for every **0** except for the rightmost one, there are two choices i.e. either cut the string after that zero or don’t. Thus, the final answer becomes **2 ^{(c_zero – 1)}** for even strings.

The case, where the string can’t be split is the case when it ends at a

**1**. Thus, for odd strings answer will always be zero as the last split part will always be odd.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `#define maxN 20` `#define maxM 64` `// Function to return the required count` `int` `cntSplits(string s)` `{` ` ` `// If the splitting is not possible` ` ` `if` `(s[s.size() - 1] == ` `'1'` `)` ` ` `return` `0;` ` ` `// To store the count of zeroes` ` ` `int` `c_zero = 0;` ` ` `// Counting the number of zeroes` ` ` `for` `(` `int` `i = 0; i < s.size(); i++)` ` ` `c_zero += (s[i] == ` `'0'` `);` ` ` `// Return the final answer` ` ` `return` `(` `int` `)` `pow` `(2, c_zero - 1);` `}` `// Driver code` `int` `main()` `{` ` ` `string s = ` `"10010"` `;` ` ` `cout << cntSplits(s);` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` `class` `GFG` `{` `static` `int` `maxN = ` `20` `;` `static` `int` `maxM = ` `64` `;` `// Function to return the required count` `static` `int` `cntSplits(String s)` `{` ` ` `// If the splitting is not possible` ` ` `if` `(s.charAt(s.length() - ` `1` `) == ` `'1'` `)` ` ` `return` `0` `;` ` ` `// To store the count of zeroes` ` ` `int` `c_zero = ` `0` `;` ` ` `// Counting the number of zeroes` ` ` `for` `(` `int` `i = ` `0` `; i < s.length(); i++)` ` ` `c_zero += (s.charAt(i) == ` `'0'` `) ? ` `1` `: ` `0` `;` ` ` `// Return the final answer` ` ` `return` `(` `int` `)Math.pow(` `2` `, c_zero - ` `1` `);` `}` `// Driver code` `public` `static` `void` `main(String []args)` `{` ` ` `String s = ` `"10010"` `;` ` ` `System.out.println(cntSplits(s));` `}` `}` `// This code is contributed by PrinciRaj1992` |

## Python3

`# Python3 implementation of the approach` `# Function to return the required count` `def` `cntSplits(s) :` ` ` `# If the splitting is not possible` ` ` `if` `(s[` `len` `(s) ` `-` `1` `] ` `=` `=` `'1'` `) :` ` ` `return` `0` `;` ` ` `# To store the count of zeroes` ` ` `c_zero ` `=` `0` `;` ` ` `# Counting the number of zeroes` ` ` `for` `i ` `in` `range` `(` `len` `(s)) :` ` ` `c_zero ` `+` `=` `(s[i] ` `=` `=` `'0'` `);` ` ` `# Return the final answer` ` ` `return` `int` `(` `pow` `(` `2` `, c_zero ` `-` `1` `));` `# Driver code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `s ` `=` `"10010"` `;` ` ` `print` `(cntSplits(s));` ` ` `# This code is contributed by AnkitRai01` |

## C#

`// C# implementation of the approach` `using` `System;` ` ` `class` `GFG` `{` `static` `int` `maxN = 20;` `static` `int` `maxM = 64;` `// Function to return the required count` `static` `int` `cntSplits(String s)` `{` ` ` `// If the splitting is not possible` ` ` `if` `(s[s.Length - 1] == ` `'1'` `)` ` ` `return` `0;` ` ` `// To store the count of zeroes` ` ` `int` `c_zero = 0;` ` ` `// Counting the number of zeroes` ` ` `for` `(` `int` `i = 0; i < s.Length; i++)` ` ` `c_zero += (s[i] == ` `'0'` `) ? 1 : 0;` ` ` `// Return the final answer` ` ` `return` `(` `int` `)Math.Pow(2, c_zero - 1);` `}` `// Driver code` `public` `static` `void` `Main(String []args)` `{` ` ` `String s = ` `"10010"` `;` ` ` `Console.WriteLine(cntSplits(s));` `}` `}` `// This code is contributed by 29AjayKumar` |

## Javascript

`<script>` `// Javascript implementation of the approach` `var` `maxN = 20;` `var` `maxM = 64;` `// Function to return the required count` `function` `cntSplits(s)` `{` ` ` `// If the splitting is not possible` ` ` `if` `(s[s.length - 1] == ` `'1'` `)` ` ` `return` `0;` ` ` `// To store the count of zeroes` ` ` `var` `c_zero = 0;` ` ` `// Counting the number of zeroes` ` ` `for` `(` `var` `i = 0; i < s.length; i++)` ` ` `c_zero += (s[i] == ` `'0'` `);` ` ` `// Return the final answer` ` ` `return` `Math.pow(2, c_zero - 1);` `}` `// Driver code` `var` `s = ` `"10010"` `;` `document.write( cntSplits(s));` `</script>` |

**Output:**

4

**Time Complexity:** O(N)**Auxiliary Space: **O(1)