# Sum of all palindromic numbers lying in the range [L, R] for Q queries

Last Updated : 27 Apr, 2023

Given Q queries in the form of 2D array arr[][] whose every row consists of two numbers L and R which denotes the range [L, R], the task is to find the sum of all Palindrome Numbers lying in range [L, R].

Input: Q = 2, arr[][] = { {10, 13}, {12, 21} }
Output:
11

Explanation:
From 10 to 13 only 11 is the palindrome number
From 12 to 21 there is no palindromic number
Input: Q = 4, arr[][] = { { 10, 10 }, { 258, 785 }, {45, 245 }, { 1, 1000} }
Output:

27024
2955
50040

Approach:
The idea is to use the prefix sum array. The sum of all palindromic number till that particular index is precomputed and stored in an array pref[] so that every query can be answered in O(1) time.

1. Initialise the prefix array pref[].
2. Iterate from 1 to N and check if the number is palindromic or not:
• If the number is palindromic then, the current index of pref[] will store the sum of the number and the number at previous index of pref[].
• Else the current index of pref[] is same as the value at previous index of pref[].
3. For Q queries the sum of all palindromic numbers for range [L, R] can be found as follows:

`sum = pref[R] - pref[L - 1]`
1.

Below is the implementation of the above approach

## C++

 `// C++ program to find the sum` `// of all palindrome numbers` `// in the given range` `#include ` `using` `namespace` `std;`   `// pref[] array to precompute` `// the sum of all palindromic` `// number` `long` `long` `pref[100001];`   `// Function that return number` `// num if num is palindromic` `// else return 0` `int` `checkPalindrome(``int` `num)` `{`   `    ``// Convert num to string` `    ``string str = to_string(num);`   `    ``int` `l = 0, r = str.length() - 1;`   `    ``while` `(l < r) {` `        ``if` `(str[l] != str[r]) {` `            ``return` `0;` `        ``}` `        ``l++;` `        ``r--;` `    ``}` `    ``return` `num;` `}`   `// Function to precompute the` `// sum of all palindrome numbers` `// upto 100000` `void` `preCompute()` `{` `    ``for` `(``int` `i = 1; i <= 100000; ++i) {`   `        ``// checkPalindrome()` `        ``// return the number i` `        ``// if i is palindromic` `        ``// else return 0` `        ``pref[i] = pref[i - 1]` `                  ``+ checkPalindrome(i);` `    ``}` `}`   `// Function to print the sum` `// for each query` `void` `printSum(``int` `L, ``int` `R)` `{` `    ``cout << pref[R] - pref[L - 1]` `         ``<< endl;` `}`   `// Function to print sum of all` `// palindromic numbers between` `// [L, R]` `void` `printSumPalindromic(``int` `arr[][2],` `                         ``int` `Q)` `{`   `    ``// Function that pre computes` `    ``// the sum of all palindromic` `    ``// numbers` `    ``preCompute();`   `    ``// Iterate over all Queries` `    ``// to print the sum` `    ``for` `(``int` `i = 0; i < Q; i++) {` `        ``printSum(arr[i][0], arr[i][1]);` `    ``}` `}`   `// Driver code` `int` `main()` `{` `    ``// Queries` `    ``int` `Q = 2;` `    ``int` `arr[][2] = { { 10, 13 },` `                     ``{ 12, 21 } };`   `    ``// Function that print the` `    ``// the sum of all palindromic` `    ``// number in Range [L, R]` `    ``printSumPalindromic(arr, Q);` `    ``return` `0;` `}`

## Java

 `// Java program to find the sum` `// of all palindrome numbers` `// in the given range` `import` `java.util.*;`   `class` `GFG{` ` `  `// pref[] array to precompute` `// the sum of all palindromic` `// number` `static` `int` `[]pref = ``new` `int``[``100001``];` ` `  `// Function that return number` `// num if num is palindromic` `// else return 0` `static` `int` `checkPalindrome(``int` `num)` `{` ` `  `    ``// Convert num to String` `    ``String str = String.valueOf(num);` ` `  `    ``int` `l = ``0``, r = str.length() - ``1``;` ` `  `    ``while` `(l < r) {` `        ``if` `(str.charAt(l) != str.charAt(r)) {` `            ``return` `0``;` `        ``}` `        ``l++;` `        ``r--;` `    ``}` `    ``return` `num;` `}` ` `  `// Function to precompute the` `// sum of all palindrome numbers` `// upto 100000` `static` `void` `preCompute()` `{` `    ``for` `(``int` `i = ``1``; i <= ``100000``; ++i) {` ` `  `        ``// checkPalindrome()` `        ``// return the number i` `        ``// if i is palindromic` `        ``// else return 0` `        ``pref[i] = pref[i - ``1``]` `                  ``+ checkPalindrome(i);` `    ``}` `}` ` `  `// Function to print the sum` `// for each query` `static` `void` `printSum(``int` `L, ``int` `R)` `{` `    ``System.out.print(pref[R] - pref[L - ``1``]` `         ``+``"\n"``);` `}` ` `  `// Function to print sum of all` `// palindromic numbers between` `// [L, R]` `static` `void` `printSumPalindromic(``int` `arr[][],` `                         ``int` `Q)` `{` ` `  `    ``// Function that pre computes` `    ``// the sum of all palindromic` `    ``// numbers` `    ``preCompute();` ` `  `    ``// Iterate over all Queries` `    ``// to print the sum` `    ``for` `(``int` `i = ``0``; i < Q; i++) {` `        ``printSum(arr[i][``0``], arr[i][``1``]);` `    ``}` `}` ` `  `// Driver code` `public` `static` `void` `main(String[] args)` `{` `    ``// Queries` `    ``int` `Q = ``2``;` `    ``int` `arr[][] = { { ``10``, ``13` `},` `                     ``{ ``12``, ``21` `} };` ` `  `    ``// Function that print the` `    ``// the sum of all palindromic` `    ``// number in Range [L, R]` `    ``printSumPalindromic(arr, Q);` `}` `}`   `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 program to find the sum` `# of all palindrome numbers` `# in the given range`   `# pref[] array to precompute` `# the sum of all palindromic` `# number` `pref``=``[``0``]``*``100001`   `# Function that return number` `# num if num is palindromic` `# else return 0` `def` `checkPalindrome(num):` `    `  `    ``# Convert num to string` `    ``strr ``=` `str``(num)` `    ``l ``=` `0` `    ``r ``=` `len``(strr)``-` `1` `    ``while` `(l < r):` `        ``if` `(strr[l] !``=` `strr[r]):` `            ``return` `0` `            `  `        ``l``+``=``1` `        ``r``-``=``1` `    `  `    ``return` `num`     `# Function to precompute the` `# sum of all palindrome numbers` `# upto 100000` `def` `preCompute():` `    ``for` `i ``in` `range``(``1``,``100001``):` `        ``# checkPalindrome()` `        ``# return the number i` `        ``# if i is palindromic` `        ``# else return 0` `        ``pref[i] ``=` `pref[i ``-` `1``]``+` `checkPalindrome(i)` `    `      `# Function to print the sum` `# for each query` `def` `printSum(L, R):` `    ``print``(pref[R] ``-` `pref[L ``-` `1``])`     `# Function to print sum of all` `# palindromic numbers between` `# [L, R]` `def` `printSumPalindromic(arr,Q):` `    `  `    ``# Function that pre computes` `    ``# the sum of all palindromic` `    ``# numbers` `    ``preCompute()` `    `  `    ``# Iterate over all Queries` `    ``# to print the sum` `    ``for` `i ``in` `range``(Q):` `        ``printSum(arr[i][``0``], arr[i][``1``])` `    `      `# Driver code`   `# Queries` `Q ``=` `2` `arr``=` `[[``10``, ``13` `],[ ``12``, ``21` `]]`   `# Function that print the` `# the sum of all palindromic` `# number in Range [L, R]` `printSumPalindromic(arr, Q)`   `# This code is contributed by shivanisinghss2110`

## C#

 `// C# program to find the sum` `// of all palindrome numbers` `// in the given range` `using` `System;`   `class` `GFG{` `  `  `// pref[] array to precompute` `// the sum of all palindromic` `// number` `static` `int` `[]pref = ``new` `int``[100001];` `  `  `// Function that return number` `// num if num is palindromic` `// else return 0` `static` `int` `checkPalindrome(``int` `num)` `{` `  `  `    ``// Convert num to String` `    ``String str = String.Join(``""``,num);` `  `  `    ``int` `l = 0, r = str.Length - 1;` `  `  `    ``while` `(l < r) {` `        ``if` `(str[l] != str[r]) {` `            ``return` `0;` `        ``}` `        ``l++;` `        ``r--;` `    ``}` `    ``return` `num;` `}` `  `  `// Function to precompute the` `// sum of all palindrome numbers` `// upto 100000` `static` `void` `preCompute()` `{` `    ``for` `(``int` `i = 1; i <= 100000; ++i) {` `  `  `        ``// checkPalindrome()` `        ``// return the number i` `        ``// if i is palindromic` `        ``// else return 0` `        ``pref[i] = pref[i - 1]` `                  ``+ checkPalindrome(i);` `    ``}` `}` `  `  `// Function to print the sum` `// for each query` `static` `void` `printSum(``int` `L, ``int` `R)` `{` `    ``Console.Write(pref[R] - pref[L - 1]` `         ``+``"\n"``);` `}` `  `  `// Function to print sum of all` `// palindromic numbers between` `// [L, R]` `static` `void` `printSumPalindromic(``int` `[,]arr,` `                         ``int` `Q)` `{` `  `  `    ``// Function that pre computes` `    ``// the sum of all palindromic` `    ``// numbers` `    ``preCompute();` `  `  `    ``// Iterate over all Queries` `    ``// to print the sum` `    ``for` `(``int` `i = 0; i < Q; i++) {` `        ``printSum(arr[i,0], arr[i,1]);` `    ``}` `}` `  `  `// Driver code` `public` `static` `void` `Main(String[] args)` `{` `    ``// Queries` `    ``int` `Q = 2;` `    ``int` `[,]arr = { { 10, 13 },` `                     ``{ 12, 21 } };` `  `  `    ``// Function that print the` `    ``// the sum of all palindromic` `    ``// number in Range [L, R]` `    ``printSumPalindromic(arr, Q);` `}` `}`   `// This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output:

```11
0```

Time Complexity: O(Q+105)
Auxiliary Space: O(105)

Share your thoughts in the comments