Related Articles
Count three-digit numbers having difference X with its reverse
• Last Updated : 28 Apr, 2021

Given an integer X, the task is to count the total number of three-digit numbers having difference X with its reverse. If no such number exists, then print -1.

Examples:

Input: X = 792
Output : 10
Explanation :
901 – 109 = 792
911 – 119 = 792
921 – 129 = 792
931 – 139 = 792
941 – 149 = 792
951 – 159 = 792
961 – 169 = 792
971 – 179 = 792
981 – 189 = 792
991 – 199 = 792

Input: X = 0
Output: 90

Approach: The given problem can be solved based on the following observations:

Let N = rpq
Therefore, N = 100r + 10q + p
Therefore, reverse of N = 100p + 10q + r
Therefore, the problem reduces to solving (100r + 10q + p) – (r + 10q + 100p) = X
-> 99(r – p) = X
-> r – p = X / 99
Therefore, if given X is a multiple of 99, then solution exists.

Follow the steps below to solve the problem based on the above observations:

• Check if X is multiple of 99 or not. If not found to be true, print -1 as no solution exists.
• Otherwise, calculate X / 99. Generate all pairs using digits [1, 9] and for each pair, check if their difference is equal to X / 99 or not.
• If found to be true for any pair, increase count by 10, as the middle digit can be permuted to place any value from the range [0, 9] for the obtained pair.
• Finally, print the value of the count obtained.

Below is the implementation of the above approach:

## C++

 `// C++ Program to implement``// the above approach` `#include ``using` `namespace` `std;` `// Function to count three-digit``// numbers having difference x``// with its reverse``int` `Count_Number(``int` `x)``{``    ``int` `ans = 0;` `    ``// if x is not multiple of 99``    ``if` `(x % 99 != 0) {` `        ``// No solution exists``        ``ans = -1;``    ``}``    ``else` `{` `        ``int` `diff = x / 99;` `        ``// Generate all possible pairs``        ``// of digits [1, 9]``        ``for` `(``int` `i = 1; i < 10; i++) {``            ``for` `(``int` `j = 1; j < 10; j++) {` `                ``// If any pair is obtained``                ``// with difference x / 99``                ``if` `((i - j) == diff) {` `                    ``// Increase count``                    ``ans += 10;``                ``}``            ``}``        ``}``    ``}` `    ``// Return the count``    ``return` `ans;``}` `// Driver Code``int` `main()``{``    ``int` `x = 792;``    ``cout << Count_Number(x) << endl;` `    ``return` `0;``}`

## Java

 `// Java program to implement``// the above approach``import` `java.io.*;``import` `java.util.Arrays;` `class` `GFG{`` ` `// Function to count three-digit``// numbers having difference x``// with its reverse``static` `int` `Count_Number(``int` `x)``{``    ``int` `ans = ``0``;``  ` `    ``// If x is not multiple of 99``    ``if` `(x % ``99` `!= ``0``)``    ``{``        ` `        ``// No solution exists``        ``ans = -``1``;``    ``}``    ``else``    ``{``        ``int` `diff = x / ``99``;``  ` `        ``// Generate all possible pairs``        ``// of digits [1, 9]``        ``for``(``int` `i = ``1``; i < ``10``; i++)``        ``{``            ``for``(``int` `j = ``1``; j < ``10``; j++)``            ``{``                ` `                ``// If any pair is obtained``                ``// with difference x / 99``                ``if` `((i - j) == diff)``                ``{``                    ` `                    ``// Increase count``                    ``ans += ``10``;``                ``}``            ``}``        ``}``    ``}``    ` `    ``// Return the count``    ``return` `ans;``}`` ` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ``int` `x = ``792``;``    ` `    ``System.out.println(Count_Number(x));``}``}` `// This code is contributed by sanjoy_62`

## Python3

 `# Python3 program to implement``# the above approach` `# Function to count three-digit``# numbers having difference x``# with its reverse``def` `Count_Number(x):``  ` `    ``ans ``=` `0``;` `    ``# If x is not multiple``    ``# of 99``    ``if` `(x ``%` `99` `!``=` `0``):` `        ``# No solution exists``        ``ans ``=` `-``1``;``    ``else``:``        ``diff ``=` `x ``/` `99``;` `        ``# Generate all possible pairs``        ``# of digits [1, 9]``        ``for` `i ``in` `range``(``1``, ``10``):``            ``for` `j ``in` `range``(``1``, ``10``):` `                ``# If any pair is obtained``                ``# with difference x / 99``                ``if` `((i ``-` `j) ``=``=` `diff):``                    ``# Increase count``                    ``ans ``+``=` `10``;` `    ``# Return the count``    ``return` `ans;` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``  ` `    ``x ``=` `792``;``    ``print``(Count_Number(x));` `# This code is contributed by shikhasingrajput`

## C#

 `// C# program to implement``// the above approach ``using` `System;` `class` `GFG{`` ` `// Function to count three-digit``// numbers having difference x``// with its reverse``static` `int` `Count_Number(``int` `x)``{``    ``int` `ans = 0;``   ` `    ``// If x is not multiple of 99``    ``if` `(x % 99 != 0)``    ``{``        ` `        ``// No solution exists``        ``ans = -1;``    ``}``    ``else``    ``{``        ``int` `diff = x / 99;``   ` `        ``// Generate all possible pairs``        ``// of digits [1, 9]``        ``for``(``int` `i = 1; i < 10; i++)``        ``{``            ``for``(``int` `j = 1; j < 10; j++)``            ``{``                 ` `                ``// If any pair is obtained``                ``// with difference x / 99``                ``if` `((i - j) == diff)``                ``{``                    ` `                    ``// Increase count``                    ``ans += 10;``                ``}``            ``}``        ``}``    ``}``     ` `    ``// Return the count``    ``return` `ans;``}`` ` `// Driver Code``public` `static` `void` `Main()``{``    ``int` `x = 792;``     ` `    ``Console.WriteLine(Count_Number(x));``}``}` `// This code is contributed by code_hunt`

## Javascript

 ``
Output
`10`

Time Complexity: O(1)
Auxiliary Space: O(1)

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