题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例:
输入: 123输出: 321
输入: -123输出: -321
输入: 120输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路分析:
这道题是easy,实际上思路是比较简单的,首先用一个数组逆向的存储整数各位,再遍历一次数组,重新构建一遍即可。但是由于这个整数溢出问题,我也磕磕绊绊提交了多次,主要还是自己基础不够扎实。这里需要注意的是如何对于整数溢出进行判断,参考了一个博客的相关内容:
另外也有一些题解采用了更加简洁的方法,没有用我这种这么直接的方式去判断溢出,算是比较巧妙的。可以参考博客:
代码:
1 class Solution { 2 public: 3 int reverse(int x) { 4 if(x>INT_MAX || x
num; 7 while(x!=0) 8 { 9 int tmp = x%10;10 num.push_back(tmp);11 x = x/10;12 }13 int res = 0;14 int base = 1;15 for(int i=num.size()-1; i>=0; i--)16 {17 18 if(num[i] > INT_MAX/base || num[i] < INT_MIN/base)19 return 0;20 if(num[i]<0)21 {22 if(base*num[i] < INT_MIN - res)23 return 0;24 }25 else if(num[i]>0)26 {27 if(base*num[i] > INT_MAX - res)28 return 0;29 }30 res += num[i]*base;31 if(i>0)32 {33 if(base >= INT_MAX/10)34 return 0;35 else36 base *= 10;37 }38 }39 return res;40 }41 };