原题网址:https://leetcode.com/problems/reverse-integer/#/description
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
题解:这道题如果不考虑溢出,就非常简单,题解也更加多样,比如:可以将输入转化为字符串,反转字符串(LeetCode中的另外一道题)。考虑溢出,则要考虑反转以后的情况,反转的时候可能会造成溢出。
我们通过对输入除以10来求余,得到输入最末尾的数,也就是反转以后的最高位。以此类推,继续求余,得到次高位。每次计算,我们都对新的到的余数的组合做判断,看是否溢出。这里我们需要用long来定义余数的组合,如果大于int的最大值,或小于int的最小值则认为溢出。
我们通过 INT_MAX 与 INT_MIN 来判断整形输入的最大最小值,这是C++自带的函数,使用时需要在头文件中包含:
#include<limits>
class Solution {
public:
int reverse(int x)
{
long rem = 0;
while (x!=0)
{
rem = rem * 10;
rem = rem + x % 10;
x = x / 10;
if (rem > INT_MAX || rem < INT_MIN)
{
return 0;
}
}
return rem;
}
};