要点
这一题的要点有三个:
接收长度不同的数字并翻转
判断结果是否溢出
解决方法
翻转:为了能够接收不同长度的数字进行反转操作,我们使用循环结构进行操作。(注:这里创建的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();
}
}
发表回复