题目
给出一个32位的有符号整数,数值范围在[-2^31, 2^31-1]。要求输出翻转的整数。如果反转的整数不在数值范围内则是溢出,输出0。如:输入1234,输出4321;输入-45,输出-54
思路
将数字转为字符串,然后反转即可,不过要注意反转后的数字可能会溢出的问题。
代码
public int reverse(int x) {
//将数字转为字符串
String numStr = x + "";
//用于判断是否是负数
Boolean isMinus = false;
if (numStr.indexOf("-") == 0) {
//负数的符号不可反转,只反转数字
numStr = numStr.substring(1);
isMinus = true;
}
//字符串反转
numStr = new StringBuffer(numStr).reverse().toString();
//字符串转数字
int num = 0;
try{
num = Integer.parseInt(numStr);
}catch(Exception e){
//溢出返回0
return 0;
}
if (isMinus) {
num = -1 * num;
}
//是否溢出
int minNum = (int) (Math.pow(2,31)) * -1;
int maxNum = (int) Math.pow(2,31) - 1;
if (num < minNum || num > maxNum) {
return 0;
}
return num;
}