题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围$ [−2^{31} , 2^{31} − 1] $,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
解题思路
int型反转之后得到n,有可能n的范围超过int,所以定义一个long类型的n。
整数反转需要从个位数开始取值,每次取一位,x最后一位:x % 10,然后下一次取数时就需要n取到的数向前移一位也就是扩大10倍。所以n = n * 10 + x % 10; 随后x缩小10十倍进行取下一个末位值,当x变成个位数时,取最后一个值后结束循环。
代码
class Solution {
public int reverse(int x) {
long n = 0;
while (x!=0){
n = n * 10 + x % 10; // x%10 余为x最后一位数,每次计算到这都是n整体前进一位再加上x的后一位作为n的个位
x /= 10;
}
return (int)n==n? (int)n:0;
//return (int)n == n ? n : 0 把n强制转换为int类型与long类型n进行比较,可以改变n的取值方式然后再跟long的n进行比较,避免发生返回溢出的int错误数值!
}
}