如何反向一个整数的位数?(包括溢出处理)

2021年3月28日15:54:34 发表评论 718 次浏览

本文概述

假设输入是32位整数, 则编写程序以反转整数。如果反向整数溢出, 则输出-1作为输出。

让我们看看整数位数反转的简单方法.

C ++

// 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;
}

Java

// 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.

python

# 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

C#

// 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

的PHP

<?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
?>

输出如下:

6985

但是, 如果数量很大, 以至于反向溢出, 则输出是一些垃圾值。如果我们使用输入为任意大的数字来运行上面的代码, 请说1000000045, 则输出是一些垃圾值, 例如1105032705或任何其他垃圾值。看到这个用于输出。

如何处理溢出?

想法是存储和的先前值可以存储在变量中, 该变量可以每次检查以查看反向是否溢出。

下面是处理这种情况的实现。

C ++

// 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)

C

// 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;
}

Java

// 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));
     }
}

Python3

# 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)

C#

// 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

输出如下:

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

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: