题目描述

给定一个32位的整数,将其反转为另一个整数。想法是这样的:不断的取出最后一位的数,将其添加到结果中,直到输入的数为零。但是在反转后要注意结果可能会溢出。我们知道32bit整数的取值范围为-2^32 ~ 2^32 - 1,那么我们就需要判断中间的结果是否溢出,如果中间某一步已经发生了溢出,就直接结束。
官方给出的溢出的判断原则为:

AC代码:
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
//官方解答
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7))
return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8))
return 0;
rev = rev * 10 + pop;
}
return rev;
}
int reverse2(int x){
int res = 0;
//递归的进行求解
while(x != 0){
//先将存储结果的值*10,再将取得的x的最后一位加上去
int pop = x % 10;
res = res * 10 + pop;
//x去掉最后一位,继续求解
x /= 10;
}
//最后判断得到的结果是否在Integer的范围之内,如果越界返回0,否则返回结果
return (res > INT_MAX || res < INT_MIN) ? 0 : res;
}
};
int main()
{
int num = 120;
Solution s;
cout<<s.reverse(num)<<endl;
cout<<s.reverse2(num)<<endl;
return 0;
}
3553

被折叠的 条评论
为什么被折叠?



