0007 整数反转
题目链接:https://leetcode-cn.com/problems/reverse-integer/
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [ − 2 31 −2^{31} −231, 2 31 − 1 2^{31} − 1 231−1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解法
int reverse(int x) {
//INT_MIN的相反数还是它本身,而且反转溢出,返回0
if (x == INT_MIN) return 0;
// tmp用来存储反转的值,flag用来标记,0正1负
int tmp = 0, flag = 0;
if (x < 0)
{
x = -x;
flag = 1;
}
while (x != 0)
{
tmp = tmp * 10 + (x % 10);
if(tmp > INT_MAX / 10 && x >= 10) return 0;
x /= 10;
}
if (tmp < 0) return 0;
if (flag == 1) return -tmp;
else return tmp;
}