Dígitos inversos de un entero con desbordamiento manejado | conjunto 2

Dado un entero N de 32 bits . La tarea es invertir N , si el entero invertido se desborda, imprime -1 como salida.

Ejemplos

Entrada: N = 123
Salida: 321

Entrada: N = -123
Salida: -321

Entrada: N = 120
Salida: 21

 

Enfoque: A diferencia de los enfoques del Conjunto 1 del artículo, este problema se puede resolver simplemente usando una estructura de datos de 64 bits y un rango de tipo de datos int [-2^31, 2^31 – 1]

  • Copie el valor del número dado N en una variable larga
  • Comprobar si es negativo
  • Ahora invierta el número largo dígito por dígito, y si en algún paso, su valor sale del rango del tipo int, devuelva 0 .
  • Haz que el número resultante sea negativo si el número dado es negativo
  • Nuevamente verifique que el número esté en el rango int. En caso afirmativo, devuelva 0 , de lo contrario, devuelva el número invertido.

A continuación se muestra la implementación del enfoque anterior.

C++

// C++ program for above approach
#include <bits/stdc++.h>
 
// Function to reverse digits in a number
int reverseDigits(int N)
{
    // Taking a long variable
    // to store the number
    long m = N;
 
    int neg = m < 0 ? -1 : 1;
 
    if (m * neg < pow(-2, 31)
        || m * neg >= pow(2, 31))
        return 0;
    m = m * neg;
    long n = 0;
 
    while (m > 0) {
        if (n * 10 < pow(-2, 31)
            || n * 10 >= pow(2, 31))
            return 0;
        n = n * 10 + m % 10;
        m = m / 10;
    }
    if (n * neg < pow(-2, 31)
        || n * neg >= pow(2, 31))
        return 0;
    n = n * neg;
    return n;
}
 
// Driver Code
int main()
{
    int N = 5896;
    printf("Reverse of no. is %d",
           reverseDigits(N));
    return 0;
}

Java

// Java program for above approach
class GFG {
 
  // Function to reverse digits in a number
  static int reverseDigits(int N) {
 
    // Taking a long variable
    // to store the number
    long m = N;
 
    int neg = m < 0 ? -1 : 1;
 
    if (m * neg < Math.pow(-2, 31)
        || m * neg >= Math.pow(2, 31))
      return 0;
    m = m * neg;
    long n = 0;
 
    while (m > 0) {
      if (n * 10 < Math.pow(-2, 31)
          || n * 10 >= Math.pow(2, 31))
        return 0;
      n = n * 10 + m % 10;
      m = m / 10;
    }
    if (n * neg < Math.pow(-2, 31)
        || n * neg >= Math.pow(2, 31))
      return 0;
    n = n * neg;
    return (int) n;
  }
 
  // Driver Code
  public static void main(String args[]) {
    int N = 5896;
    System.out.println("Reverse of no. is " + reverseDigits(N));
  }
}
 
// This code is contributed by Saurabh Jaiswal

Python3

# Python code for the above approach
 
# Function to reverse digits in a number
def reverseDigits(N):
 
    # Taking a long variable
    # to store the number
    m = N
 
    neg = -1 if m < 0 else 1
 
    if (m * neg < (-2 ** 31) or m * neg >= (2 ** 31)):
        return 0
    m = m * neg
    n = 0
 
    while (m > 0):
        if (n * 10 < (-2 ** 31) or n * 10 >= (2 ** 31)):
            return 0
        n = n * 10 + m % 10
        m = (m // 10)
    if (n * neg < (-2 ** 31) or n * neg >= (2 ** 31)):
        return 0
    n = n * neg
    return n
 
# Driver Code
N = 5896
print(f"Reverse of no. is  {reverseDigits(N)}")
 
# This code is contributed by gfgking

C#

// C# program for above approach
using System;
class GFG
{
 
  // Function to reverse digits in a number
  static int reverseDigits(int N)
  {
 
    // Taking a long variable
    // to store the number
    long m = N;
 
    int neg = m < 0 ? -1 : 1;
 
    if (m * neg < Math.Pow(-2, 31)
        || m * neg >= Math.Pow(2, 31))
      return 0;
    m = m * neg;
    long n = 0;
 
    while (m > 0) {
      if (n * 10 < Math.Pow(-2, 31)
          || n * 10 >= Math.Pow(2, 31))
        return 0;
      n = n * 10 + m % 10;
      m = m / 10;
    }
    if (n * neg < Math.Pow(-2, 31)
        || n * neg >= Math.Pow(2, 31))
      return 0;
    n = n * neg;
    return (int)n;
  }
 
  // Driver Code
  public static void Main()
  {
    int N = 5896;
    Console.Write("Reverse of no. is " + reverseDigits(N));
  }
}
 
// This code is contributed by Samim Hossain Mondal.

Javascript

<script>
        // JavaScript code for the above approach
 
        // Function to reverse digits in a number
        function reverseDigits(N)
        {
         
            // Taking a long variable
            // to store the number
            let m = N;
 
            let neg = m < 0 ? -1 : 1;
 
            if (m * neg < Math.pow(-2, 31)
                || m * neg >= Math.pow(2, 31))
                return 0;
            m = m * neg;
            let n = 0;
 
            while (m > 0) {
                if (n * 10 < Math.pow(-2, 31)
                    || n * 10 >= Math.pow(2, 31))
                    return 0;
                n = n * 10 + m % 10;
                m = Math.floor(m / 10);
            }
            if (n * neg < Math.pow(-2, 31)
                || n * neg >= Math.pow(2, 31))
                return 0;
            n = n * neg;
            return n;
        }
 
        // Driver Code
        let N = 5896;
        document.write(`Reverse of no. is
            ${reverseDigits(N)}`);
 
         // This code is contributed by Potta Lokesh
    </script>
Producción

Reverse of no. is 6985

Complejidad de Tiempo: O(D), donde D es el número de dígitos en N.  
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por Code_r y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *