# Minimum number of operations on a binary string such that it gives 10^A as remainder when divided by 10^B

Given a binary string **str** of length **N** and two integers **A** and **B** such that **0 â‰¤ A < B < n**. The task is to count the minimum number of operations on the string such that it gives 10^{A} as remainder when divided by 10^{B}. An operation means changing **1** to **0** or **0** to **1**.

**Examples:**

Input:str = “1001011001”, A = 3, B = 6Output:2

The string after 2 operations is 1001001000.

1001001000 % 10^{6}= 10^{3}

Input:str = “11010100101”, A = 1, B = 5Output:3

**Approach:** In order for the number to give **10 ^{A}** as remainder when divided by

**10**, the last

^{B}**B**digits of the string has to be

**0**except the digit at

**(A + 1)**position from the last which should be

^{th}**1**. Therefore, check the last

**B**digits of the string for the above condition and increase the count by 1 for each mismatch of digit.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to return the minimum number` `// of operations on a binary string such that` `// it gives 10^A as remainder when divided by 10^B` `int` `findCount(string s, ` `int` `n, ` `int` `a, ` `int` `b)` `{` ` ` `// Initialize result` ` ` `int` `res = 0;` ` ` `// Loop through last b digits` ` ` `for` `(` `int` `i = 0; i < b; i++) {` ` ` `if` `(i == a)` ` ` `res += (s[n - i - 1] != ` `'1'` `);` ` ` `else` ` ` `res += (s[n - i - 1] != ` `'0'` `);` ` ` `}` ` ` `return` `res;` `}` `// Driver code` `int` `main()` `{` ` ` `string str = ` `"1001011001"` `;` ` ` `int` `N = str.size();` ` ` `int` `A = 3, B = 6;` ` ` `cout << findCount(str, N, A, B);` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` `import` `java.util.*;` `class` `GFG` `{` ` ` ` ` `// Function to return the minimum number` ` ` `// of operations on a binary string such that` ` ` `// it gives 10^A as remainder when divided by 10^B` ` ` `static` `int` `findCount(String s, ` `int` `n, ` `int` `a, ` `int` `b)` ` ` `{` ` ` `// Initialize result` ` ` `int` `res = ` `0` `;` ` ` `char` `[]s1 = s.toCharArray();` ` ` ` ` `// Loop through last b digits` ` ` `for` `(` `int` `i = ` `0` `; i < b; i++)` ` ` `{` ` ` ` ` `if` `(i == a)` ` ` `{` ` ` `if` `(s1[n - i - ` `1` `] != ` `'1'` `)` ` ` `res += ` `1` `;` ` ` `}` ` ` `else` ` ` `{` ` ` `if` `(s1[n - i - ` `1` `] != ` `'0'` `)` ` ` `res += ` `1` `;` ` ` `}` ` ` ` ` `}` ` ` ` ` `return` `res;` ` ` `}` ` ` ` ` `// Driver code` ` ` `static` `public` `void` `main (String []args)` ` ` `{` ` ` ` ` `String str = ` `"1001011001"` `;` ` ` `int` `N = str.length() ;` ` ` `int` `A = ` `3` `, B = ` `6` `;` ` ` ` ` `System.out.println(findCount(str, N, A, B));` ` ` ` ` `}` `}` `// This code is contributed by ChitraNayal` |

## Python3

`# Python 3 implementation of the approach` `# Function to return the minimum number` `# of operations on a binary string such that` `# it gives 10^A as remainder when divided by 10^B` `def` `findCount(s, n, a, b):` ` ` `# Initialize result` ` ` `res ` `=` `0` ` ` `# Loop through last b digits` ` ` `for` `i ` `in` `range` `(b):` ` ` `if` `(i ` `=` `=` `a):` ` ` `res ` `+` `=` `(s[n ` `-` `i ` `-` `1` `] !` `=` `'1'` `)` ` ` `else` `:` ` ` `res ` `+` `=` `(s[n ` `-` `i ` `-` `1` `] !` `=` `'0'` `)` ` ` `return` `res` `# Driver code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` `str` `=` `"1001011001"` ` ` `N ` `=` `len` `(` `str` `)` ` ` `A ` `=` `3` ` ` `B ` `=` `6` ` ` `print` `(findCount(` `str` `, N, A, B))` `# This code is contributed by` `# Surendra_Gangwar` |

## C#

`// C# implementation of the approach` `using` `System;` `class` `GFG` `{` ` ` ` ` `// Function to return the minimum number` ` ` `// of operations on a binary string such that` ` ` `// it gives 10^A as remainder when divided by 10^B` ` ` `static` `int` `findCount(` `string` `s, ` `int` `n, ` `int` `a, ` `int` `b)` ` ` `{` ` ` `// Initialize result` ` ` `int` `res = 0;` ` ` ` ` `// Loop through last b digits` ` ` `for` `(` `int` `i = 0; i < b; i++)` ` ` `{` ` ` ` ` `if` `(i == a)` ` ` `{` ` ` `if` `(s[n - i - 1] != ` `'1'` `)` ` ` `res += 1;` ` ` `}` ` ` `else` ` ` `{` ` ` `if` `(s[n - i - 1] != ` `'0'` `)` ` ` `res += 1 ;` ` ` `}` ` ` ` ` `}` ` ` ` ` `return` `res;` ` ` `}` ` ` ` ` `// Driver code` ` ` `static` `public` `void` `Main ()` ` ` `{` ` ` ` ` `string` `str = ` `"1001011001"` `;` ` ` `int` `N = str.Length ;` ` ` `int` `A = 3, B = 6;` ` ` ` ` `Console.WriteLine(findCount(str, N, A, B));` ` ` ` ` `}` `}` `// This code is contributed by AnkitRai01` |

## Javascript

`<script>` `// Javascript implementation of the approach` `// Function to return the minimum number` `// of operations on a binary string such that` `// it gives 10^A as remainder when divided by 10^B` `function` `findCount(s, n, a, b)` `{` ` ` ` ` `// Initialize result` ` ` `var` `res = 0;` ` ` `// Loop through last b digits` ` ` `for` `(` `var` `i = 0; i < b; i++)` ` ` `{` ` ` `if` `(i == a)` ` ` `res += (s[n - i - 1] != ` `'1'` `);` ` ` `else` ` ` `res += (s[n - i - 1] != ` `'0'` `);` ` ` `}` ` ` `return` `res;` `}` `// Driver code` `var` `str = ` `"1001011001"` `;` `var` `N = str.length;` `var` `A = 3, B = 6;` `document.write(findCount(str, N, A, B));` `// This code is contributed by itsok` `</script>` |

**Output:**

2

**Time Complexity:** O(N )

**Auxiliary Space:** O(N)