# Sub-string Divisibility by 11 Queries

• Difficulty Level : Easy
• Last Updated : 08 Jul, 2021

Given a large number, n (having number digits up to 10^6) and various queries of the below form :

```Query(l, r) :  find if the sub-string between the
indices l and r (Both inclusive)
are divisible by 11. ```

Examples:

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.

```Input: n = 122164154695
Queries: l = 0 r = 3, l = 1 r = 2, l = 5 r = 9,
l = 0 r = 11
Output:
True
False
False
True

Explanation:
In the first query, 1221 is divisible by 11
In the second query, 22 is divisible by 11 and so on.```

We know that any number is divisible by 11 if the difference between the sum of odd indexed digits and the sum of even indexed digits is divisible by 11, i.e.,
Sum(digits at odd places) – Sum(digits at even places) should be divisible by 11.
Hence, the idea is to pre-process an auxiliary array that would store the sum of digits at odd and even places.
To evaluate a query we can use the auxiliary array to answer it in O(1).

## C++

 `// C++ program to check divisibility by 11 in``// substrings of a number string``#include ``using` `namespace` `std;` `const` `int` `MAX = 1000005;` `// To store sums of even and odd digits``struct` `OddEvenSums``{``    ``// Sum of even placed digits``    ``int` `e_sum;` `    ``// Sum of odd placed digits``    ``int` `o_sum;``};` `// Auxiliary array``OddEvenSums sum[MAX];` `// Utility function to evaluate a character's``// integer value``int` `toInt(``char` `x)``{``    ``return` `int``(x) - 48;``}` `// This function receives the string representation``// of the number and precomputes the sum array``void` `preCompute(string x)``{``    ``// Initialize everb``    ``sum[0].e_sum = sum[0].o_sum = 0;` `    ``// Add the respective digits depending on whether``    ``// they're even indexed or odd indexed``    ``for` `(``int` `i=0; i

## Java

 `// Java program to check divisibility by 11 in``// subStrings of a number String``class` `GFG``{`` ` `static` `int` `MAX = ``1000005``;`` ` `// To store sums of even and odd digits``static` `class` `OddEvenSums``{``    ``// Sum of even placed digits``    ``int` `e_sum;`` ` `    ``// Sum of odd placed digits``    ``int` `o_sum;``};`` ` `// Auxiliary array``static` `OddEvenSums []sum = ``new` `OddEvenSums[MAX];`` ` `// Utility function to evaluate a character's``// integer value``static` `int` `toInt(``char` `x)``{``    ``return` `x - ``48``;``}`` ` `// This function receives the String representation``// of the number and precomputes the sum array``static` `void` `preCompute(String x)``{``    ``// Initialize everb``    ``sum[``0``].e_sum = sum[``0``].o_sum = ``0``;`` ` `    ``// Add the respective digits depending on whether``    ``// they're even indexed or odd indexed``    ``for` `(``int` `i = ``0``; i < x.length(); i++)``    ``{``        ``if` `(i % ``2` `== ``0``)``        ``{``            ``sum[i + ``1``].e_sum = sum[i].e_sum + toInt(x.charAt(i));``            ``sum[i + ``1``].o_sum = sum[i].o_sum;``        ``}``        ``else``        ``{``            ``sum[i + ``1``].o_sum = sum[i].o_sum + toInt(x.charAt(i));``            ``sum[i + ``1``].e_sum = sum[i].e_sum;``        ``}``    ``}``}`` ` `// This function receives l and r representing``// the indices and prints the required output``static` `boolean` `query(``int` `l, ``int` `r)``{``    ``int` `diff = (sum[r + ``1``].e_sum - sum[r + ``1``].o_sum) -``               ``(sum[l].e_sum - sum[l].o_sum);`` ` `    ``return` `(diff % ``11` `== ``0``);``}`` ` `//driver function to check the program``public` `static` `void` `main(String[] args)``{``    ``for` `(``int` `i = ``0``; i < MAX; i++) {``        ``sum[i] = ``new` `OddEvenSums();``    ``}``    ``String s = ``"122164154695"``;`` ` `    ``preCompute(s);`` ` `    ``System.out.println(query(``0``, ``3``) ? ``1` `: ``0``);``    ``System.out.println(query(``1``, ``2``) ? ``1` `: ``0``);``    ``System.out.println(query(``5``, ``9``) ? ``1` `: ``0``);``    ``System.out.println(query(``0``, ``11``) ? ``1` `: ``0``);`` ` `}``}` `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 program to check divisibility by``# 11 in subStrings of a number String``MAX` `=` `1000005` `# To store sums of even and odd digits``class` `OddEvenSums:``    ` `    ``def` `__init__(``self``, e_sum, o_sum):``        ` `        ``# Sum of even placed digits``        ``self``.e_sum ``=` `e_sum``  ` `        ``# Sum of odd placed digits``        ``self``.o_sum ``=` `o_sum` `sum` `=` `[OddEvenSums(``0``, ``0``) ``for` `i ``in` `range``(``MAX``)]` `# This function receives the String``# representation of the number and``# precomputes the sum array``def` `preCompute(x):` `    ``# Initialize everb``    ``sum``[``0``].e_sum ``=` `sum``[``0``].o_sum ``=` `0``  ` `    ``# Add the respective digits``    ``# depending on whether``    ``# they're even indexed or``    ``# odd indexed``    ``for` `i ``in` `range``(``len``(x)):``        ``if` `(i ``%` `2` `=``=` `0``):``            ``sum``[i ``+` `1``].e_sum ``=` `(``sum``[i].e_sum ``+``                              ``int``(x[i]))``            ``sum``[i ``+` `1``].o_sum ``=` `sum``[i].o_sum``        ` `        ``else``:``            ``sum``[i ``+` `1``].o_sum ``=` `(``sum``[i].o_sum ``+``                              ``int``(x[i]))``            ``sum``[i ``+` `1``].e_sum ``=` `sum``[i].e_sum``        ` `# This function receives l and r representing``# the indices and prints the required output``def` `query(l, r):` `    ``diff ``=` `((``sum``[r ``+` `1``].e_sum ``-``             ``sum``[r ``+` `1``].o_sum) ``-``            ``(``sum``[l].e_sum ``-``             ``sum``[l].o_sum))``  ` `    ``if` `(diff ``%` `11` `=``=` `0``):``        ``return` `True``    ``else``:``        ``return` `False` `# Driver code``if` `__name__``=``=``"__main__"``:``    ` `    ``s ``=` `"122164154695"``  ` `    ``preCompute(s)``  ` `    ``print``(``1` `if` `query(``0``, ``3``) ``else` `0``)``    ``print``(``1` `if` `query(``1``, ``2``) ``else` `0``)``    ``print``(``1` `if` `query(``5``, ``9``) ``else` `0``)``    ``print``(``1` `if` `query(``0``, ``11``) ``else` `0``)` `# This code is contributed by rutvik_56`

## C#

 `// C# program to check``// divisibility by 11 in``// subStrings of a number String``using` `System;``class` `GFG{`` ` `static` `int` `MAX = 1000005;`` ` `// To store sums of even``// and odd digits ``public` `class` `OddEvenSums``{``  ``// Sum of even placed digits``  ``public` `int` `e_sum;` `  ``// Sum of odd placed digits``  ``public` `int` `o_sum;``};`` ` `// Auxiliary array``static` `OddEvenSums []sum =``       ``new` `OddEvenSums[MAX];`` ` `// Utility function to``// evaluate a character's``// integer value``static` `int` `toInt(``char` `x)``{``  ``return` `x - 48;``}`` ` `// This function receives the``// String representation of the``// number and precomputes the sum array``static` `void` `preCompute(String x)``{``  ``// Initialize everb``  ``sum[0].e_sum = sum[0].o_sum = 0;` `  ``// Add the respective digits``  ``// depending on whether they're``  ``// even indexed or odd indexed``  ``for` `(``int` `i = 0; i < x.Length; i++)``  ``{``    ``if` `(i % 2 == 0)``    ``{``      ``sum[i + 1].e_sum = sum[i].e_sum +``                         ``toInt(x[i]);``      ``sum[i + 1].o_sum = sum[i].o_sum;``    ``}``    ``else``    ``{``      ``sum[i + 1].o_sum = sum[i].o_sum +``                         ``toInt(x[i]);``      ``sum[i + 1].e_sum = sum[i].e_sum;``    ``}``  ``}``}`` ` `// This function receives l and r``// representing the indices and``// prints the required output``static` `bool` `query(``int` `l, ``int` `r)``{``  ``int` `diff = (sum[r + 1].e_sum -``              ``sum[r + 1].o_sum) -``             ``(sum[l].e_sum -``              ``sum[l].o_sum);` `  ``return` `(diff % 11 == 0);``}`` ` `// Driver function to check the program``public` `static` `void` `Main(String[] args)``{``  ``for` `(``int` `i = 0; i < MAX; i++)``  ``{``    ``sum[i] = ``new` `OddEvenSums();``  ``}``  ` `  ``String s = ``"122164154695"``;``  ``preCompute(s);` `  ``Console.WriteLine(query(0, 3) ? 1 : 0);``  ``Console.WriteLine(query(1, 2) ? 1 : 0);``  ``Console.WriteLine(query(5, 9) ? 1 : 0);``  ``Console.WriteLine(query(0, 11) ? 1 : 0);``}``}` `// This code is contributed by gauravrajput1`

## Javascript

 ``

Output:

```1
1
0
1```

This article is contributed by Ashutosh Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.