题目
https://leetcode-cn.com/problems/reverse-integer/
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] , 就返回 0.
假设环境不允许存储 64 位整数(有符号或无符号).
思路
对自身整除 10, 得到整数为抹掉最后一位的数值
对自身取余 10, 得到最后一位
通过乘以 10 实现每次向左移位
循环结束的条件是当前值不为 0
如果强转为 int, 值没有改变, 则认为在 int 范围内, 否则认为超出精度
代码
public int reverse(int x) {
// 声明为 long 避免超出精度
long num = 0;
while (x != 0) {
num = num * 10 + x % 10;
x /= 10;
}
// 如果转为 int 值与 long 相等, 那么认为没有超出 int 精度, 原样返回; 否则返回 0
return (int) num == num ? (int) num : 0;
}