# Counting even decimal value substrings in a binary string

Given a binary string of size N. Count all substring that have even decimal value considering binary to decimal conversion from left to right (For example a substring “1011” is treated as 13)

Examples :

```Input :  101
Output : 2
Explanation :
Substring are   : 1, 10, 101, 0, 01, 1
In decimal form : 1,  1,  3, 0,  2, 1
There are only 2 even decimal value substring.

Input : 10010
Output : 8
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Simple Solution is to one-by-one generate all sub-string and compute their decimal values. At lest, return count of even decimal value substring.

Below is the implementation of above idea.

## C++

 `// C++ code to generate all possible substring ` `// and count even decimal value substring. ` `#include ` `using` `namespace` `std; ` ` `  `// generate all substring in arr[0..n-1] ` `int` `evenDecimalValue(string str, ``int` `n) ` `{ ` `    ``// store the count ` `    ``int` `result = 0; ` ` `  `    ``// Pick starting point ` `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// Pick ending point ` `        ``for` `(``int` `j = i; j < n; j++) { ` ` `  `            ``int` `decimalValue = 0; ` `            ``int` `powerOf2 = 1; ` ` `  `            ``// substring between current starting ` `            ``// and ending points ` `            ``for` `(``int` `k = i; k <= j; k++) { ` `                ``decimalValue += ((str[k] - ``'0'``) * powerOf2); ` ` `  `                ``// increment power of 2 by one ` `                ``powerOf2 *= 2; ` `            ``} ` ` `  `            ``if` `(decimalValue % 2 == 0) ` `                ``result++; ` `        ``} ` `    ``} ` `    ``return` `result; ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``string str = ``"10010"``; ` `    ``int` `n = 5; ` `    ``cout << evenDecimalValue(str, n) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java Program to count all even ` `// decimal value substring . ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `    ``// generate all substring in arr[0..n-1] ` `    ``static` `int` `evenDecimalValue(String str, ``int` `n) ` `    ``{ ` `       ``// store the count ` `       ``int` `result = ``0``; ` ` `  `       ``// Pick starting point ` `       ``for` `(``int` `i = ``0``; i < n; i++)  ` `       ``{ ` ` `  `          ``// Pick ending point ` `          ``for` `(``int` `j = i; j < n; j++)  ` `          ``{ ` ` `  `            ``int` `decimalValue = ``0``; ` `            ``int` `powerOf2 = ``1``; ` ` `  `            ``// substring between current  ` `            ``// starting and ending points ` `            ``for` `(``int` `k = i; k <= j; k++)  ` `            ``{ ` `                ``decimalValue += ((str.charAt(k) -  ` `                                 ``'0'``) * powerOf2); ` ` `  `                ``// increment power of 2 by one ` `                ``powerOf2 *= ``2``; ` `            ``} ` ` `  `            ``if` `(decimalValue % ``2` `== ``0``) ` `                ``result++; ` `          ``} ` `      ``} ` `      ``return` `result; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main (String[] args)  ` `    ``{ ` `       ``String str = ``"10010"``; ` `       ``int` `n = ``5``; ` `       ``System.out.println(evenDecimalValue(str, n)); ` `     `  `    ``} ` `} ` ` `  `//This code is contributed by Gitanjali. `

## Python3

 `# Python3 Program to count all even ` `# decimal value substring ` `import` `math ` ` `  `# Generate all substring in arr[0..n-1] ` `def` `evenDecimalValue(``str``, n) : ` `     `  `    ``# Store the count ` `    ``result ``=` `0` ` `  `    ``# Pick starting point ` `    ``for` `i ``in` `range``(``0``, n) : ` ` `  `        ``# Pick ending point ` `        ``for` `j ``in` `range``(i, n): ` ` `  `            ``decimalValue ``=` `0``; ` `            ``powerOf2 ``=` `1``; ` ` `  `            ``# Substring between current  ` `            ``# starting and ending points ` `            ``for` `k ``in` `range``(i, j ``+` `1``) : ` `                ``decimalValue ``+``=` `((``int``(``str``[k])``-` `0``) ``*` `powerOf2) ` ` `  `                ``# increment power of 2 by one ` `                ``powerOf2 ``*``=` `2` `             `  ` `  `            ``if` `(decimalValue ``%` `2` `=``=` `0``): ` `                ``result ``+``=` `1` `         `  `    ``return` `result ` ` `  ` `  `# Driver code ` `str` `=` `"10010"` `n ``=` `5` `print` `(evenDecimalValue(``str``, n)) ` `     `  `# This code is contributed by Gitanjali. `

## C#

 `// C# Program to count all even ` `// decimal value substring . ` `using` `System; ` ` `  `class` `GFG  ` `{ ` `    ``// generate all substring in arr[0..n-1] ` `    ``static` `int` `evenDecimalValue(``string` `str, ``int` `n) ` `    ``{ ` `        ``// store the count ` `        ``int` `result = 0; ` `     `  `        ``// Pick starting point ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `     `  `            ``// Pick ending point ` `            ``for` `(``int` `j = i; j < n; j++)  ` `            ``{ ` `     `  `                ``int` `decimalValue = 0; ` `                ``int` `powerOf2 = 1; ` `     `  `                ``// substring between current  ` `                ``// starting and ending points ` `                ``for` `(``int` `k = i; k <= j; k++)  ` `                ``{ ` `                    ``decimalValue += ((str[k] -  ` `                                    ``'0'``) * powerOf2); ` `     `  `                    ``// increment power of 2 by one ` `                    ``powerOf2 *= 2; ` `                ``} ` `     `  `                ``if` `(decimalValue % 2 == 0) ` `                    ``result++; ` `            ``} ` `        ``} ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main ()  ` `    ``{ ` `        ``String str = ``"10010"``; ` `        ``int` `n = 5; ` `        ``Console.WriteLine(evenDecimalValue(str, n)); ` `         `  `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## PHP

 ` `

Output :

`8`

Time Complexity : O(n3)

Efficient solution is based on the fact that substring whose starting value is ‘0’ always produce even decimal value. so we simply traverse a loop from left to right and count all substring whose starting value is zero.

Below is the implementation of above idea.

## C++

 `// Program to count all even decimal value substring . ` `#include ` `using` `namespace` `std; ` ` `  `// function return count of even decimal ` `// value substring ` `int` `evenDecimalValue(string str, ``int` `n) ` `{ ` `    ``// store the count of even decimal value substring ` `    ``int` `result = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// substring started with '0' ` `        ``if` `(str[i] == ``'0'``) { ` ` `  `            ``// increment result by (n-i) ` `            ``// because all substring which are generate by ` `            ``// this character produce even decimal value. ` `            ``result += (n - i); ` `        ``} ` `    ``} ` `    ``return` `result; ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``string str = ``"10010"``; ` `    ``int` `n = 5; ` `    ``cout << evenDecimalValue(str, n) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java Program to count all even ` `// decimal value substring . ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `    ``// function return count of  ` `    ``// even decimal value substring ` `    ``static` `int` `evenDecimalValue(String str, ``int` `n) ` `    ``{ ` `        ``// store the count of even ` `        ``// decimal value substring ` `        ``int` `result = ``0``; ` `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{ ` ` `  `            ``// substring started with '0' ` `            ``if` `(str.charAt(i) == ``'0'``)  ` `            ``{ ` ` `  `                ``// increment result by (n-i) ` `                ``// because all substring which  ` `                ``// are generate by this character  ` `                ``// produce even decimal value. ` `                ``result += (n - i); ` `            ``} ` `        ``} ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``String str = ``"10010"``; ` `        ``int` `n = ``5``; ` `        ``System.out.println(evenDecimalValue(str, n)); ` `    ``} ` `} ` `// This code is contributed  ` `// by Gitanjali. `

## Python3

 `# Python Program to count all even ` `# decimal value substring ` ` `  `# Function return count of even  ` `# decimal value substring ` `def` `evenDecimalValue(``str``, n) : ` ` `  `    ``# Store the count of even ` `    ``# decimal value substring ` `    ``result ``=` `0` `    ``for` `i ``in` `range``(``0``, n): ` ` `  `        ``# substring started with '0' ` `        ``if` `(``str``[i] ``=``=` `'0'``): ` ` `  `            ``# increment result by (n-i) ` `            ``# because all substring which are generate by ` `            ``# this character produce even decimal value. ` `            ``result ``+``=` `(n ``-` `i) ` `     `  `    ``return` `result ` ` `  `# Driver code ` `str` `=` `"10010"` `n ``=` `5` `print` `(evenDecimalValue(``str``, n)) ` ` `  `# This code is contributed by Gitanjali. `

## C#

 `// C# Program to count all even ` `// decimal value substring . ` `using` `System; ` ` `  `class` `GFG  ` `{ ` `    ``// function return count of  ` `    ``// even decimal value substring ` `    ``static` `int` `evenDecimalValue(``string` `str, ``int` `n) ` `    ``{ ` `        ``// store the count of even ` `        ``// decimal value substring ` `        ``int` `result = 0; ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` ` `  `            ``// substring started with '0' ` `            ``if` `(str[i] == ``'0'``)  ` `            ``{ ` ` `  `                ``// increment result by (n-i) ` `                ``// because all substring which  ` `                ``// are generate by this character  ` `                ``// produce even decimal value. ` `                ``result += (n - i); ` `            ``} ` `        ``} ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``string` `str = ``"10010"``; ` `        ``int` `n = 5; ` `        ``Console.WriteLine(evenDecimalValue(str, n)); ` `    ``} ` `} ` `// This code is contributed  ` `// by vt_m. `

## PHP

 ` `

]
Output :

```8
```

Time Complexity : O(n)
Space complexity :O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : SanjuTomar, vt_m

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.