给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进

2019-03-09  本文已影响0人  七月流火andy

题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

e.g:

  1. 输入: 123 输出: 321
  2. 输入: -123 输出: -321

思路:

余10,result * 10 加上余10后的结果,需要验证结果是否可能溢出

java代码

 /**
     * 题目5:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
     * e.g: 1. 输入: 123  输出: 321
     * 2. 输入: -123 输出: -321
     * 思路: 余10,result * 10 加上余10后的结果
     * 需要验证结果是否又可能移除,可以在加操作前,用最大值减去余10后的结果与result * 10比较
     *
     * @param x
     * @return
     */
    private static int solution06(int x) {
        int input = x;
        if (input < 0) {
            input = -input;
        }
        int result = 0;
        int temp = 0;
        while (input > 0) {
            temp = input % 10;
            // 溢出,可能存在的问题:负数和正数不一样
            // 乘可能造成的溢出
            if (Integer.MAX_VALUE / 10 < result) {
                result = 0;
                break;
            }
            // 加可能造成的溢出
            if (Integer.MAX_VALUE - result * 10 < temp) {
                result = 0;
                break;
            }
            result = result * 10 + temp;
            input = input / 10;
        }
        if (x < 0) {
            return -result;
        }
        return result;
    }

已经看到这里了,帮忙点个喜欢❤️呗,谢谢啦!!

上一篇下一篇

猜你喜欢

热点阅读