给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
思路:本题主要考虑两个点,第一从x中拿到每一位,比较简单,取模除十循环即可;第二拿到数字后如何存储,并且要判断是否有溢出。假设拿到的数字是num,存储的结果是ans,那ans=ans*10+num,问题即判断ans溢出问题。
注. 环境不允许存储64位整数,不能使用-2^31 <= ans <= 2^31-1直接判断溢出,因此将ans+10+num赋给ans之前就判断是否溢出。
当ans*10+num>INT_MAX时,
当ans>INT_MAX/10时溢出,当ans=INT_MAX/10时,num>7时溢出,7是2^31-1的个位数。
当ans*10+num<INT_MIN时,
当ans<INT_MIN/10时溢出,当ans=INT_MIN/10时,num<-8时溢出,-8是-2^31的个位数。
class Solution {
public:
int reverse(int x) {
if (x == 0) return 0;
int num = 0, ans = 0;