问题:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0
没有考虑溢出情况
class Solution {
public:
int reverse(int x) {
int y=0,k=1;
if(x < 0) {
k=0;
x = -x;}
while(x > 0){
y = y * 10 + x % 10;
x /= 10;
t++;
}
if(k==0) y=-y;
return y;
}
};
考虑溢出
C中常量INT_MAX和INT_MIN分别表示最大、最小整数,定义在头文件limits.h中。
int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1 (2147483647 ) ,INT_MIN= -2^31 (-2147483648) 。
C超过该限值的数,都会出现溢出,出现warning,但是并不会出现error。
class Solution {
public:
int reverse(int x) {
int y=0;
while(x!= 0){
if(y>INT_MAX/10 ||(y==INT_MAX/10 && x%10 > 7 )) return 0;
if(y<INT_MIN/10 ||( y==INT_MIN/10 && x%10<-8)) return 0;
y = y * 10 + x % 10;
x /= 10;
}
return y;
}
};
};