给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
记rev是翻转之后的数字,为了完成翻转,我们可以重复弹出x末尾的数字,将其推入rev的末尾,直到x是0
要在没有辅助栈或者数组的帮助下弹出或者推入数字,我们可以使用以下的数学方法:
题目需要判断推入数字是否溢出,要在推入数字之前判断,如果溢出那么不等式不成立返回0
但是题目要求不允许使用64位整数,也就是运算过程中的数字必须在32位有符号整数的范围内,因此我们不能直接按照上面式子进行计算,需要找其他方式。
C++
class Solution {
public:
int reverse(int x) {
int rev =0;//新建一个翻转之后的变量rev
while(x!=0){
if(rev<INT_MIN/10||rev >INT_MAX/10){
//满足上述不等式
return 0;
}
int digit =x%10; //取最后一个数
x/=10;//更新x的值
rev=rev*10+digit;//推入翻转之后的变量rev
}
return rev;
}
};