DESKTOP-4LGG1I2_20200902-周拉才让
问题
今天做刷题时遇到一个数字反转的题,题目是这样的:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。例如:
给出:123;
得出:321;
给出:-123;
得出:-321;
将思路理清,编写完代码后遇到这样一个问题
public int reverse(int x) {
if (x > 0) {
String s = x + "";//转换成字符串
StringBuffer buffer = new StringBuffer(s);
buffer.reverse();//将字符反转
return Integer.valueOf(buffer.toString());//通过自动拆箱将字符串转换成int类型返回
} else {
x = -x;
String s = x + "";
StringBuffer buffer = new StringBuffer(s);
buffer.reverse();
return Integer.valueOf(buffer.toString())*(-1);
}
}
当传入1534236469后运行期间一直运行错误,找不到错在哪。
解决
和同学讨论后知道了问题所在,原来是将数字反转之后溢出了,进而改写了代码结果终于正确了
public int reverse(int x) {
if (x >= 0) {
String s = x + "";
StringBuffer buffer = new StringBuffer(s);
buffer.reverse();
return Long.valueOf(buffer.toString()) < Integer.MAX_VALUE ? Integer.valueOf(buffer.toString()) : 0;
} else if (x < 0 && x > Integer.MIN_VALUE) {
x = Math.abs(x);
String s = x + "";
StringBuffer buffer = new StringBuffer(s);
buffer.reverse();
return Long.valueOf(buffer.toString()) * (-1) > Integer.MIN_VALUE
? Integer.valueOf(buffer.toString()) * (-1)
: 0;
} else {
return 0;
}
吐槽
点赞