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 reverseint 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 Codeint main(){    int x = 792;    cout << Count_Number(x) << endl;     return 0;}

Java

 // Java program to implement// the above approachimport java.io.*;import java.util.Arrays; class GFG{  // Function to count three-digit// numbers having difference x// with its reversestatic 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 Codepublic 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 reversedef 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 Codeif __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 reversestatic 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 Codepublic 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)

My Personal Notes arrow_drop_up