Leetcode编程练习(C++实现)

7、反转整数

/*
    题目描述: 给定一个 32 位有符号整数,将整数中的数字进行反转。

    基本思想:
    1、类似于字符串的逆置,取x的最低位(个位)数字:pop = x % 10;
    2、求结果: rev = rev * 10 + pop;
    3、将 x 更新为: x = x / 10;
    4、重复1~3步骤,直至 x == 0

    注意:
    1、进行有效性检查
    2、rev = rev * 10 + pop 可能会导致溢出,因此要对 rev 进行有效性检查
    a)、当 rev > INT_MAX / 10 或者 rev < INT_MIN / 10时,rev 在更新值后必然溢出;
    b)、当 rev = INT_MAX / 10 时,只有当 pop > 7 才会溢出;
    c)、当 rev = INT_MIN / 10 时,只有当 pop < -8 才会溢出
*/
#include "stdafx.h"
#include <iostream>
using namespace std;
int reverse(int x);

int main()
{
    //从控制台输入一个整数
    cout << "Enter a integer: ";
    int number;
    cin >> number;
    cout << reverse(number) << endl;
    return 0;
}

int reverse(int x)
{
    if (x > INT_MAX || x < INT_MIN)
        return 0;
    int rev = 0;
    while (x != 0)
    {
        int pop = x % 10;
        if (rev > INT_MAX / 10 || (rev == INT_MAX && pop > 7))
            return 0;
        if (rev < INT_MIN / 10 || (rev == INT_MIN && pop < -8))
            return 0;
        rev = rev * 10 + pop;
        x /= 10;
    }
    return rev;
}

猜你喜欢

转载自www.cnblogs.com/SChenqi/p/9885713.html