要点
这一题的要点有三个:
接收长度不同的数字并翻转
判断结果是否溢出
解决方法
翻转:为了能够接收不同长度的数字进行反转操作, 我们使用循环结构进行操作。(注:这里创建的 sum 变量一定要用 long 类型而不能用 int,原因是采用 int 的话,即使结果溢出,该溢出的结果仍然在 int 的取值范围内,不利于判断溢出。所以采用占位 64bit 的 long 类型更佳。)
long sum = 0;
while(x != 0){
sum = sum * 10 + x % 10;
x /= 10;
}
判断溢出:这里使用了 Java 中的 Integer 类(整数类,缩写就是 Int)的静态变量 MAX_VALUE 和 MIN_VALUE,就能直接得到整型变量可表示数值的上下限。当结果不在此范围内时,则溢出,并返回 0. 否则返回正常结果。(注:因为题目给定的函数返回类型为 int,所以在最后返回结果时务必先将 long 型转换为 int 型再返回。)
if(sum < Integer.MIN_VALUE || sum > Integer.MAX_VALUE)
return 0;
return new Long(sum).intValue();
最终程序
class Solution {
public int reverse(int x) {
long sum = 0;
while(x != 0){
sum = sum * 10 + x % 10;
x /= 10;
}
if(sum < Integer.MIN_VALUE || sum > Integer.MAX_VALUE)
return 0;
return new Long(sum).intValue();
}
}