LeetCode 7.整数翻转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例三:
输入: 123
输出: 321
示例二:
输入: -123
输出: -321
示例三:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
问题分析:
INT_MAX=2^32-1=2147483647
INT_MIN=-2^32=-2147483648
假设x是整数:x=x*10+pop
当x>INT_MAX时,溢出
当x==INT_MAX/10,并且pop>7时溢出
当x为负数时,同理
代码如下:
class Solution {
public:
int reverse(int x) {
int x_reverse=0;
while(x){
int pop=x%10;
x/=10;
if(x_reverse>INT_MAX/10||(x_reverse==INT_MAX/10&&pop>7)) return 0;
if(x_reverse<INT_MIN/10||(x_reverse==INT_MIN/10&&pop<-8)) return 0;
x_reverse=x_reverse*10+pop;
}
return x_reverse;
}
};