给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321示例 2:
输入: -123 输出: -321示例 3:
输入: 120 输出: 21注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
题目分析 :
模拟一下例子 123,不断对10取余,如第一次取余结果为3,然后用新建立的对象存:
rev = rev*10(上一次处理结果)+ans(取余数字),存完把原数字对10取整得12,继续该步骤
ans = 2,则 rev = rev*10+ ans = 3* 10 + 2,继续,
ans = 1,rev =rev *10+ans = 32*10 + 1 =321.
依次类推,同时需要判断溢出情况,c++中默认 IN_MAX为int 的最大值,IN_MIN为int的最小值,用这两个值代替即可。
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0)
{
int ans = x % 10;
x = x / 10;
if (rev > INT_MAX/10 || (rev == INT_MAX/10) && ans > 7)
return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN/10) && ans < -8)
return 0;
rev = rev * 10 + ans;
}
return rev;
}
};