# 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 10A as remainder when divided by 10B. An operation means changing 1 to 0 or 0 to 1.

Examples:

Input: str = “1001011001”, A = 3, B = 6
Output: 2
The string after 2 operations is 1001001000.
1001001000 % 106 = 103

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

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

Approach: In order for the number to give 10A as remainder when divided by 10B, the last B digits of the string has to be 0 except the digit at (A + 1)th position from the last which should be 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 ` `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 `

Output:

```2
```

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.