整数反转
题目描述
给定一个一位32位的有符号整数,将这个整数上每一位数字进行反转,并把int
类型的结果返回。
实例
输入: -321
返回值: -123
思路
首先,输入的整数有可能为负数。但由于c++里取模运算的特点(数学上:对一个负数取模,结果是正数,但在c++里,对一个负数取模,结果仍为负数),这种看似“不合理”的特点,在这道题里反而使得代码更加简洁。接着,依次获得整数上每一位。 对整数x
取模,就能得到个位上的数字。接着x /= 10
,把个位去掉。之后,再进行取模运算,就能得到百位上的数字。以此类推。用res = 0
变量表示反转后的结果,每次循环执行res = res * 10 + x % 10
操作。当x
变为0时,循环停止,将res
值返回.
C++代码
需要注意因为x
的范围是有限,因此当我们反转x
的时候,最终的结果可能会超过INT_MAX
。为了方便起见,将res
的类型设为long long
类型。倒数第二段代码是leetcode上的要求:当res
的值超过int
的范围时,return 0
.
class Solution {
public:
int reverse(int x) {
typedef long long LL;
//bool is_minus = false;
LL res = 0;
while(x)
{
res = res * 10 + x % 10;
x /= 10;
}
if(res > INT_MAX || res < INT_MIN) return 0;
return res;
}
};