Sum Palindrome: Reverse and Add Until Palindrome

Last Updated : 6 Sep, 2026

Given a positive integer n, repeatedly reverse its digits and add the reversed number to the original number. If the resulting number becomes a palindrome within 5 iterations, return that palindrome. Otherwise, return -1.

Examples: 

Input: n = 23
Output: 55
Explanation: reverse(23) = 32, then 32+23 = 55 which is a palindrome.

Input: n = 73
Output: 121
Explanation: reverse(73) = 37, then 37+73 = 110 which is not a palindrome, again reverse(110)= 011, then 110+11 = 121 which is a palindrome.

Try It Yourself
redirect icon

[Expected Approach] Reverse and Add Until Palindrome - O(log n) Time and O(1) Space

The idea is to repeatedly reverse the digits of the current number and add the reversed value to it.

After each addition, check whether the resulting number is a palindrome.

If a palindrome is found within 5 iterations, return it; otherwise, return -1.

Working of the Approach:

  • First, check if the given number is already a palindrome. If yes, return it.
  • Repeat the process for at most 5 iterations.
  • Reverse the digits of the current number using arithmetic operations.
  • Add the reversed number to the current number.
  • Check whether the resulting number is a palindrome by reversing it and comparing both values.
  • If it is a palindrome, return the number immediately.
  • If no palindrome is obtained after 5 iterations, return -1.
C++
#include <bits/stdc++.h>
using namespace std;

long long reverseNumber(long long n) {
    long long rev = 0;

    while (n > 0) {
        rev = rev * 10 + n % 10;
        n /= 10;
    }

    return rev;
}

bool isPalindrome(long long n) {
    return n == reverseNumber(n);
}

long long isSumPalindrome(long long n) {
    if (isPalindrome(n))
        return n;

    for (int i = 0; i < 5; i++) {
        n += reverseNumber(n);

        if (isPalindrome(n))
            return n;
    }

    return -1;
}

int main() {
    long long n = 73;

    cout << isSumPalindrome(n);

    return 0;
}
Java
class GFG {

    static long reverseNumber(long n) {
        long rev = 0;

        while (n > 0) {
            rev = rev * 10 + n % 10;
            n /= 10;
        }

        return rev;
    }

    static boolean isPalindrome(long n) {
        return n == reverseNumber(n);
    }

    static long isSumPalindrome(long n) {
        if (isPalindrome(n))
            return n;

        for (int i = 0; i < 5; i++) {
            n += reverseNumber(n);

            if (isPalindrome(n))
                return n;
        }

        return -1;
    }

    public static void main(String[] args) {
        long n = 73;

        System.out.println(isSumPalindrome(n));
    }
}
Python
def reverseNumber(n):
    rev = 0

    while n > 0:
        rev = rev * 10 + n % 10
        n //= 10

    return rev


def isPalindrome(n):
    return n == reverseNumber(n)


def isSumPalindrome(n):
    if isPalindrome(n):
        return n

    for _ in range(5):
        n += reverseNumber(n)

        if isPalindrome(n):
            return n

    return -1


if __name__ == "__main__":
    n = 73

    print(isSumPalindrome(n))
C#
using System;

class GFG
{
    static int reverseNumber(int n)
    {
        int rev = 0;

        while (n > 0)
        {
            rev = rev * 10 + n % 10;
            n /= 10;
        }

        return rev;
    }

    static bool isPalindrome(int n)
    {
        return n == reverseNumber(n);
    }

    static int isSumPalindrome(int n)
    {
        if (isPalindrome(n))
            return n;

        for (int i = 0; i < 5; i++)
        {
            n += reverseNumber(n);

            if (isPalindrome(n))
                return n;
        }

        return -1;
    }

    static void Main()
    {
        int n = 73;

        Console.WriteLine(isSumPalindrome(n));
    }
}
JavaScript
function reverseNumber(n) {
    let rev = 0;

    while (n > 0) {
        rev = rev * 10 + n % 10;
        n = Math.floor(n / 10);
    }

    return rev;
}

function isPalindrome(n) {
    return n === reverseNumber(n);
}

function isSumPalindrome(n) {
    if (isPalindrome(n))
        return n;

    for (let i = 0; i < 5; i++) {
        n += reverseNumber(n);

        if (isPalindrome(n))
            return n;
    }

    return -1;
}

let n = 73;

console.log(isSumPalindrome(n));

Output
121
Comment