题目链接:https://leetcode-cn.com/problems/reverse-integer/
题目大意:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
样例一:
输入: 123
输出: 321
样例二:
输入: -123
输出: -321
样例三:
输入: 120
输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路:这个题虽然题意很简单,但是需要注意的地方还是很多的,比如输入的是一个合法的数,但是转换完之后,就溢出了,这种情况要输出0。我的思路是把数字的每一位都分离开,然后最后再合成一个整数。负数的情况是先转化成一个正数,然后通过取模运算获得每一位的数,这时候要注意,如果输入-2147483648,这是32位有符号整数的最小值,这是合法的,但是是32位有符号整数最大值为2147483647,这时候在负数转化为正数的时候会发生溢出。
代码:
class Solution {
public:
int reverse(int x) {
vector<int> v;
if(x == 0) return 0;
else {
long long t = x;
if(x == -2147483648) return 0;
if(x < 0) x = -x;
while(x != 0){
v.push_back(x % 10);
x /= 10;
}
long long ans = 0;
for(int i = 0; i < v.size(); i++){
ans = ans * 10 + v[i];
}
if(t < 0) ans = -ans;
if(ans > 2147483647 || ans < -2147483648) return 0;
return ans;
}
}
};