Рубрики

Обратные цифры целого числа с обработкой переполнения

Напишите программу для обратного преобразования целого числа, предполагая, что ввод является 32-разрядным целым числом. Если обратное целое число переполняется, выведите -1 в качестве выходных данных.

Давайте рассмотрим простой подход к обратным числам целого числа .

C ++

// Простая программа на C для обратного преобразования цифр
// целое число
#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;

}

   
/ * Драйверная программа для проверки reversDigits * /

int main()

{

    int num = 5896;

    printf("Reverse of no. is %d", reversDigits(num));

    return 0;

}

Джава

// Java-программа для изменения числа

  

class GFG

{

    / * Итеративная функция для обратного

    цифры числа * /

    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;

    }

      

    // Код драйвера

    public static void main (String[] args) 

    {

        int num = 4562;

        System.out.println("Reverse of no. is " 

                           + reversDigits(num));

    }

}

  
// Этот код предоставлен Anant Agarwal.

питон

# Python программа для изменения числа

  

n = 4562;

rev = 0

  

while(n > 0):

    a = n % 10

    rev = rev * 10 + a

    n = n / 10

      

print(rev)

  
# Этот код предоставлен Шариком Раза

C #

// C # программа для изменения числа

using System;

  

class GFG

{

    // Итеративная функция для

    // обратные цифры числа

    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;

    }

      

    // Код драйвера

    public static void Main() 

    {

        int num = 4562;

        Console.Write("Reverse of no. is "

                        + reversDigits(num));

    }

}

  
// Этот код предоставлен Sam007

PHP

<?php
// Итеративная функция для
// обратные цифры числа

function reversDigits($num)

{

    $rev_num = 0;

    while($num > 1)

    {

        $rev_num = $rev_num * 10 + 

                        $num % 10;

        $num = (int)$num / 10;

    }

    return $rev_num;

}

  
// Код драйвера

$num = 4562;

echo "Reverse of no. is "

       reversDigits($num);

  
// Этот код предоставлен aj_36
?>

Выход:

6985

Однако, если число велико, так что обратное переполнение выводится, получается какое-то мусорное значение. Если мы запустим приведенный выше код с вводом как любое большое число, скажем, 1000000045 , то на выходе будет какое-то значение мусора, например 1105032705, или любое другое значение мусора. Смотрите это для вывода.

Как справиться с переполнением?
Идея состоит в том, чтобы сохранить предыдущее значение суммы, которая может быть сохранена в переменной, которую можно проверять каждый раз, чтобы увидеть, переполнена ли обратная сторона или нет.

Ниже приведена реализация, чтобы справиться с такой ситуацией.

C ++

// C ++ программа для обратного преобразования цифр
// числа
#include <bits/stdc++.h>

  

using namespace std;

  
/ * Итеративная функция для обратного
цифры числа * /

int reversDigits(int num)

{

    // Обработка отрицательных чисел

    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;

  

        // проверка переполнения реверса или нет.

        // Значения (rev_num - curr_digit) / 10 и

        // prev_rev_num должен быть таким же, если не было

        // проблема.

        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;

}

  
// Код драйвера

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;

}

  
// Этот код добавлен
// Аканкша Рай (Abby_akku)

С

// C программа для обратного преобразования цифр числа
#include <stdio.h>

  
/ * Итеративная функция для обратного преобразования чисел num * /

int reversDigits(int num)

{

    // Обработка отрицательных чисел

    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;

  

        // проверка переполнения реверса или нет.

        // Значения (rev_num - curr_digit) / 10 и

        // prev_rev_num должен быть таким же, если не было

        // проблема.

        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;

}

  
/ * Программа драйвера для проверки обратных цифр * /

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-программа для обратного преобразования цифр числа

  

class ReverseDigits

{

    / * Итеративная функция для обратного преобразования чисел num * /

    static int reversDigits(int num)

    {

        // Обработка отрицательных чисел

        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;

       

            // проверка переполнения реверса или нет.

            // Значения (rev_num - curr_digit) / 10 и

            // prev_rev_num должен быть таким же, если не было

            // проблема.

            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 программа для обратного преобразования цифр
№ числа

  
"" "Итеративная функция для обратного
цифры числа "" "

def reversDigits(num): 

  

    # Обработка отрицательных чисел

    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 

  

        # проверка переполнения реверса или нет.

        # Значения (rev_num - curr_digit) / 10 и

        # prev_rev_num должен быть таким же, если не было

        # проблема.

        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 

  

  

  

  
# Код драйвера

if __name__ =="__main__":

    num = 12345

    print("Reverse of no. is ",reversDigits(num)) 

  

    num = 1000000045

    print("Reverse of no. is ",reversDigits(num)) 

          

      
# Этот код добавлен
# Шубхам Сингх (SHUBHAMSINGH10)

C #

// C # программа для обратного преобразования цифр
// числа

using System;

  

class GFG

{

  
/ * Итеративная функция для обратного

   цифры числа * /

static int reversDigits(int num) 

    // Обработка отрицательных чисел

    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; 

  

        // проверка переполнения реверса

        // или не. Значения (rev_num -

        // curr_digit) / 10 и prev_rev_num должны

        // быть таким же, если бы не было проблем.

        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; 

  
// Код драйвера

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

}
}

  
// Этот код предоставлен ajit

Выход:

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

Эта статья предоставлена МАЖАР ИМАМ ХАН . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Обратные цифры целого числа с обработкой переполнения

0.00 (0%) 0 votes