Related Articles
Minimum number of operations on a binary string such that it gives 10^A as remainder when divided by 10^B
• Last Updated : 02 Feb, 2021

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:
The string after 2 operations is 1001001000.
1001001000 % 106 = 103
Input: str = “11010100101”, A = 1, B = 5
Output: 3

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`

Time Complexity: O(N )

Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up