Related Articles
Smallest number to be subtracted to convert given number to a palindrome
• Last Updated : 04 Nov, 2020

Given an integer N, the task is to find the smallest number to be subtracted from N to obtain a palindrome.

Examples:

Input: N = 1000
Output: 1
Explanation: Since 1000 – 1 = 999, which is a palindrome, the smallest number to be subtracted is 1.

Input: N = 3456
Output: 13
Explanation: Since 3456 – 13 = 3443, which is a palindrome, the smallest number to be subtracted is 13.

Approach: Follow the steps below to solve the problem:

1. Iterate from N to 0.
2. Initialize a counter. At each iteration reverse the reduced value of N and compare it to the current value of N. If both are equal, print the value of the counter.
3. Otherwise, increment the counter and continue the loop until N is 0.
4. Print the value of the counter.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `// Function to evaluate minimum` `// subtraction required to make` `// a number palindrome` `void` `minSub(``int` `N)` `{`   `    ``// Counts number of` `    ``// subtractions required` `    ``int` `count = 0;`   `    ``// Run a loop till N>=0` `    ``while` `(N >= 0) {`   `        ``// Store the current number` `        ``int` `num = N;`   `        ``// Store reverse of current number` `        ``int` `rev = 0;`   `        ``// Reverse the number` `        ``while` `(num != 0) {` `            ``int` `digit = num % 10;` `            ``rev = (rev * 10) + digit;` `            ``num = num / 10;` `        ``}`   `        ``// Check if N is palindrome` `        ``if` `(N == rev) {`   `            ``break``;` `        ``}`   `        ``// Increment the counter` `        ``count++;`   `        ``// Reduce the number by 1` `        ``N--;` `    ``}`   `    ``// Print the result` `    ``cout << count;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 3456;`   `    ``// Function call` `    ``minSub(N);` `    ``return` `0;` `}`

## Java

 `// Java program for the` `// above approach` `import` `java.util.*;` `class` `GFG{`   `// Function to evaluate minimum` `// subtraction required to make` `// a number palindrome` `static` `void` `minSub(``int` `N)` `{` `  ``// Counts number of` `  ``// subtractions required` `  ``int` `count = ``0``;`   `  ``// Run a loop till N>=0` `  ``while` `(N >= ``0``) ` `  ``{` `    ``// Store the current` `    ``// number` `    ``int` `num = N;`   `    ``// Store reverse of ` `    ``// current number` `    ``int` `rev = ``0``;`   `    ``// Reverse the number` `    ``while` `(num != ``0``) ` `    ``{` `      ``int` `digit = num % ``10``;` `      ``rev = (rev * ``10``) + digit;` `      ``num = num / ``10``;` `    ``}`   `    ``// Check if N is` `    ``// palindrome` `    ``if` `(N == rev) ` `    ``{` `      ``break``;` `    ``}`   `    ``// Increment the counter` `    ``count++;`   `    ``// Reduce the number ` `    ``// by 1` `    ``N--;` `  ``}`   `  ``// Print the result` `  ``System.out.print(count);` `}`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `  ``int` `N = ``3456``;`   `  ``// Function call` `  ``minSub(N);` `}` `}`   `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 program for the above approach`   `# Function to evaluate minimum` `# subtraction required to make` `# a number palindrome` `def` `minSub(N):` `    `  `    ``# Counts number of` `    ``# subtractions required` `    ``count ``=` `0`   `    ``# Run a loop till N>=0` `    ``while` `(N >``=` `0``):` `        `  `        ``# Store the current number` `        ``num ``=` `N`   `        ``# Store reverse of current number` `        ``rev ``=` `0`   `        ``# Reverse the number` `        ``while` `(num !``=` `0``):` `            ``digit ``=` `num ``%` `10` `            ``rev ``=` `(rev ``*` `10``) ``+` `digit` `            ``num ``=` `num ``/``/` `10`   `        ``# Check if N is palindrome` `        ``if` `(N ``=``=` `rev):` `            ``break`   `        ``# Increment the counter` `        ``count ``+``=` `1`   `        ``# Reduce the number by 1` `        ``N ``-``=` `1`   `    ``# Print the result` `    ``print``(count)`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    `  `    ``N ``=` `3456`   `    ``# Function call` `    ``minSub(N)`   `# This code is contributed by bgangwar59`

## C#

 `// C# program for the` `// above approach` `using` `System;`   `class` `GFG{`   `// Function to evaluate minimum` `// subtraction required to make` `// a number palindrome` `static` `void` `minSub(``int` `N)` `{` `  `  `  ``// Counts number of` `  ``// subtractions required` `  ``int` `count = 0;`   `  ``// Run a loop till N>=0` `  ``while` `(N >= 0) ` `  ``{` `    `  `    ``// Store the current` `    ``// number` `    ``int` `num = N;`   `    ``// Store reverse of ` `    ``// current number` `    ``int` `rev = 0;`   `    ``// Reverse the number` `    ``while` `(num != 0) ` `    ``{` `      ``int` `digit = num % 10;` `      ``rev = (rev * 10) + digit;` `      ``num = num / 10;` `    ``}` `    `  `    ``// Check if N is` `    ``// palindrome` `    ``if` `(N == rev) ` `    ``{` `      ``break``;` `    ``}`   `    ``// Increment the counter` `    ``count++;`   `    ``// Reduce the number ` `    ``// by 1` `    ``N--;` `  ``}`   `  ``// Print the result` `  ``Console.Write(count);` `}`   `// Driver Code` `public` `static` `void` `Main(String[] args)` `{` `  ``int` `N = 3456;` `  `  `  ``// Function call` `  ``minSub(N);` `}` `}`   `// This code is contributed by gauravrajput1`

Output:

```13

```

Time Complexity: O(N * K), Where K is the number of digits of the integer.
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :