一、问题描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
二、问题分析
从x的最低位开始获取,逐位加上去即可。关键在于如何判断越界。C++是个强类型语言,不能通过越界逆运算回不去的方式判断。也不能通过运算后超过INT_MAX或小于INT_MIN来判断,只能在前一次运算和INT_MAX/10和INT_MIN/10来判断。
三、代码实现
#include <algorithm>
class Solution {
public:
int reverse(int x) {
int res = 0;
while(x != 0)
{
if((res > INT_MAX/10) || (res < INT_MIN/10))
return 0;
res = res * 10 + x%10;
x = x/10;
}
return res;
}
};