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

一个 32 位的有符号整数,将这个整数中的数字进行反转。

java中最大整数值是Integer.MAX_VALUE = 2^31-1 = 2147483647
同理最小整数值是Interger.MIN_VALUE = -2^31 = 22147483648
(此处个位数加粗后面需要用到)

题目:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0


    public int reverse(int x) {
        if(x==0) {
            return 0;
        }
        int rev=0;
        int temp=0;
        while(x!=0) {
            temp=x%10;
            x=x/10;
            if(rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && temp < -8)){
                return 0;
            }
            if(rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && temp > 7)){
                return 0;
            }
            rev=rev*10+temp;
        }
        return rev;
    }
   
  

在这里,因为rev=rev10+temp,因此在这句话前面判断是否大于Interger.MAX_VALUE时都要除以10,如果大于Integer.MAX_VALUE/10,那么在下面rev=rev10+temp时一定会溢出
小于同理
当然不能遗弃等于的情况,当等于Integer.MAX_VALUE/10,就要比较个位数temp和7
小于同理

你可能感兴趣的:(java)