Reverse digits of an integer with overflow handled

Write a program to reverse an integer assuming that the input is a 32-bit integer. If the reversed integer overflows, print -1 as the output.

Let us see a simple approach to reverse digits of an integer.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// A simple C program to reverse digits of
// an integer.
#include <stdio.h>
  
int reversDigits(int num)
{
    int rev_num = 0;
    while (num > 0)
    {
        rev_num = rev_num*10 + num%10;
        num = num/10;
    }
    return rev_num;
}
   
/* Driver program to test reversDigits */
int main()
{
    int num = 5896;
    printf("Reverse of no. is %d", reversDigits(num));
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to reverse a number 
  
class GFG
{
    /* Iterative function to reverse
    digits of num*/
    static int reversDigits(int num)
    {
        int rev_num = 0;
        while(num > 0)
        {
            rev_num = rev_num * 10 + num % 10;
            num = num / 10;
        }
        return rev_num;
    }
      
    // Driver code
    public static void main (String[] args) 
    {
        int num = 4562;
        System.out.println("Reverse of no. is " 
                           + reversDigits(num));
    }
}
  
// This code is contributed by Anant Agarwal.

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to reverse a number 
  
n = 4562;
rev = 0
  
while(n > 0):
    a = n % 10
    rev = rev * 10 + a
    n = n / 10
      
print(rev)
  
# This code is contributed by Shariq Raza 

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to reverse a number 
using System;
  
class GFG
{
    // Iterative function to 
    // reverse digits of num
    static int reversDigits(int num)
    {
        int rev_num = 0;
        while(num > 0)
        {
            rev_num = rev_num * 10 + num % 10;
            num = num / 10;
        }
        return rev_num;
    }
      
    // Driver code
    public static void Main() 
    {
        int num = 4562;
        Console.Write("Reverse of no. is "
                        + reversDigits(num));
    }
}
  
// This code is contributed by Sam007

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// Iterative function to 
// reverse digits of num
function reversDigits($num)
{
    $rev_num = 0;
    while($num > 1)
    {
        $rev_num = $rev_num * 10 + 
                        $num % 10;
        $num = (int)$num / 10;
    }
    return $rev_num;
}
  
// Driver Code
$num = 4562;
echo "Reverse of no. is "
       reversDigits($num);
  
// This code is contributed by aj_36
?>

chevron_right


Output:



6985

However, if the number is large such that the reverse overflows, the output is some garbage value. If we run the code above with input as any large number say 1000000045, then the output is some garbage value like 1105032705 or any other garbage value. See this for the output.

How to handle overflow?
The idea is to store previous value of the sum can be stored in a variable which can be checked every time to see if the reverse overflowed or not.

Below is the implementation to deal with such a situation.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to reverse digits 
// of a number
#include <bits/stdc++.h>
  
using namespace std;
  
/* Iterative function to reverse 
digits of num*/
int reversDigits(int num)
{
    // Handling negative numbers
    bool negativeFlag = false;
    if (num < 0)
    {
        negativeFlag = true;
        num = -num ;
    }
  
    int prev_rev_num = 0, rev_num = 0;
    while (num != 0)
    {
        int curr_digit = num % 10;
  
        rev_num = (rev_num * 10) + curr_digit;
  
        // checking if the reverse overflowed or not.
        // The values of (rev_num - curr_digit)/10 and
        // prev_rev_num must be same if there was no
        // problem.
        if ((rev_num - curr_digit) / 
               10 != prev_rev_num)
        {
            cout << "WARNING OVERFLOWED!!!"
                 << endl;
            return 0;
        }
  
        prev_rev_num = rev_num;
        num = num / 10;
    }
  
    return (negativeFlag == true) ?
                         -rev_num : rev_num;
}
  
// Driver Code
int main()
{
    int num = 12345;
    cout << "Reverse of no. is " 
         << reversDigits(num) << endl;
  
    num = 1000000045;
    cout << "Reverse of no. is " 
         << reversDigits(num) << endl;
  
    return 0;
}
  
// This code is contributed 
// by Akanksha Rai(Abby_akku)

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to reverse digits of a number
#include <stdio.h>
  
/* Iterative function to reverse digits of num*/
int reversDigits(int num)
{
    // Handling negative numbers
    bool negativeFlag = false;
    if (num < 0)
    {
        negativeFlag = true;
        num = -num ;
    }
  
    int prev_rev_num = 0, rev_num = 0;
    while (num != 0)
    {
        int curr_digit = num%10;
  
        rev_num = (rev_num*10) + curr_digit;
  
        // checking if the reverse overflowed or not.
        // The values of (rev_num - curr_digit)/10 and
        // prev_rev_num must be same if there was no
        // problem.
        if ((rev_num - curr_digit)/10 != prev_rev_num)
        {
            printf("WARNING OVERFLOWED!!!\n");
            return 0;
        }
  
        prev_rev_num = rev_num;
        num = num/10;
    }
  
    return (negativeFlag == true)? -rev_num : rev_num;
}
  
/* Driver program to test reverse Digits */
int main()
{
    int num = 12345;
    printf("Reverse of no. is %d\n", reversDigits(num));
  
    num = 1000000045;
    printf("Reverse of no. is %d\n", reversDigits(num));
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to reverse digits of a number
  
class ReverseDigits
{
    /* Iterative function to reverse digits of num*/
    static int reversDigits(int num)
    {
        // Handling negative numbers
        boolean negativeFlag = false;
        if (num < 0)
        {
            negativeFlag = true;
            num = -num ;
        }
       
        int prev_rev_num = 0, rev_num = 0;
        while (num != 0)
        {
            int curr_digit = num%10;
       
            rev_num = (rev_num*10) + curr_digit;
       
            // checking if the reverse overflowed or not.
            // The values of (rev_num - curr_digit)/10 and
            // prev_rev_num must be same if there was no
            // problem.
            if ((rev_num - curr_digit)/10 != prev_rev_num)
            {
                System.out.println("WARNING OVERFLOWED!!!");
                return 0;
            }
       
            prev_rev_num = rev_num;
            num = num/10;
        }
       
        return (negativeFlag == true)? -rev_num : rev_num;
    }
      
    public static void main (String[] args) 
    {
        int num = 12345;
        System.out.println("Reverse of no. is " + reversDigits(num));
       
        num = 1000000045;
        System.out.println("Reverse of no. is " + reversDigits(num));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to reverse digits 
# of a number 
  
""" Iterative function to reverse 
digits of num"""
def reversDigits(num): 
  
    # Handling negative numbers 
    negativeFlag = False
    if (num < 0):
      
        negativeFlag = True
        num = -num 
      
  
    prev_rev_num = 0
    rev_num = 0
    while (num != 0): 
      
        curr_digit = num % 10
  
        rev_num = (rev_num * 10) + curr_digit 
  
        # checking if the reverse overflowed or not. 
        # The values of (rev_num - curr_digit)/10 and 
        # prev_rev_num must be same if there was no 
        # problem.
        if (rev_num >= 2147483647 or 
            rev_num <= -2147483648):
            rev_num = 0
        if ((rev_num - curr_digit) // 10 != prev_rev_num):
          
            print("WARNING OVERFLOWED!!!"
            return 0
          
  
        prev_rev_num = rev_num 
        num = num //10
      
  
    return -rev_num if (negativeFlag == True) else rev_num 
  
  
  
  
# Driver code 
if __name__ =="__main__":
    num = 12345
    print("Reverse of no. is ",reversDigits(num)) 
  
    num = 1000000045
    print("Reverse of no. is ",reversDigits(num)) 
          
      
# This code is contributed
# Shubham Singh(SHUBHAMSINGH10)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to reverse digits
// of a number
using System;
  
class GFG
{
  
/* Iterative function to reverse
   digits of num*/
static int reversDigits(int num) 
    // Handling negative numbers 
    bool negativeFlag = false
    if (num < 0) 
    
        negativeFlag = true
        num = -num ; 
    
  
    int prev_rev_num = 0, rev_num = 0; 
    while (num != 0) 
    
        int curr_digit = num % 10; 
  
        rev_num = (rev_num * 10) + 
                   curr_digit; 
  
        // checking if the reverse overflowed 
        // or not. The values of (rev_num - 
        // curr_digit)/10 and prev_rev_num must 
        // be same if there was no problem. 
        if ((rev_num - curr_digit) / 10 != prev_rev_num) 
        
            Console.WriteLine("WARNING OVERFLOWED!!!"); 
            return 0; 
        
  
        prev_rev_num = rev_num; 
        num = num / 10; 
    
  
    return (negativeFlag == true) ?
                         -rev_num : rev_num; 
  
// Driver Code
static public void Main ()
{
    int num = 12345; 
    Console.WriteLine("Reverse of no. is "
                         reversDigits(num)); 
  
    num = 1000000045; 
    Console.WriteLine("Reverse of no. is "
                         reversDigits(num)); 
}
}
  
// This code is contributed by ajit

chevron_right


Output:

Reverse of no. is 54321
WARNING OVERFLOWED!!!
Reverse of no. is 0

This article is contributed by MAZHAR IMAM KHAN. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up



Article Tags :
Practice Tags :


2


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.