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;
        }

吐槽