题目:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
解题:
class Solution {
public:
/*第一步123 % 10 = 3, 得到3, 123 / 10 == 12
第二步12 % 10 = 2, 得到2, 3*10+2=32, 12 / 10 = 1
第三步1 % 10 = 1, 得到1, 32*10+1=321, 1 / 10 == 0
第一步-123 % 10=-3, 得到-3 -123 /10 = -12
第二步-12 % 10 = -2,得到-3*10-2=-32 -12 / 10 = -1
第三步-1 % 10 = -1, 得到-32 *10 -1 = -321
第四步判断正负,设置正负。
*/
int reverse(int x) {
int tmpx = x;
// 注意int x的范围是[-2^31~2^31-1]=[-2147483648, 2147483647]
// 假设2147483647,反过来时会导致大于2147483647,导致溢出,
// unsigned int范围是0~4294967295,所以不够,所以计算过程用long
long ret = 0;
while (tmpx != 0) {
ret = ret * 10 + (tmpx % 10);
tmpx = tmpx / 10;
}
// 判断是否超过有效范围
if (ret > INT_MAX || ret < INT_MIN)
ret = 0;
return ret;
}
};
作者:帅得不敢出门