给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0
此题特别要注意溢出问题。
占内存长度不同和取值范围不同。
32位系统:long是4字节32位,int是4字节32位。
64位系统:long是8字节64位,int是4字节32位。
class Solution {
public:
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)
int reverse(int x) {
long temp;//此处采取long格式,为了避免在反转时溢出,实践也证明需要将int替换为long。因位x肯定<INT_MAX,但是在翻转时就不一定了,所以当使用int时就会出现无法预知的错误
long res=0;
temp=x;
if(temp<0)
temp=-temp;
while(temp!=0)
{
res=res*10+temp%10;
temp/=10;
}
if(x<0)
res=-res;
if(res>INT_MAX||res<INT_MIN)
return 0;
return res;
}
};