*LeetCode-Reverse Integer

错惨了!!

1. 进制转换还是要练习!每次记得先做%余数,再做除法。

2.Math.floor 将double并没有转化成int 还要转化

3.这个题有复负数的情况,记得考虑!

4.整数溢出问题!!Integer.MAX_VALUE 2^31 -1

min value: -2^31

判断是否溢出的时候 要用计算结果判断 比如a+b < Integer.MAX_VALUE

 但是一旦赋值 c = a+b; c<Integer.MAX_VALUE 就已经溢出了 无法判断;????!!!what

并且一开始就要判断那个负数是否已经到达最小,否则一取绝对值就溢出了


public class Solution {
    public int reverse(int x) {
        boolean neg = false;
        if ( x < 0){
            if ( x == Integer.MIN_VALUE)
                return 0;
            x = Math.abs(x);
            neg = true;
        }
        
        int ans = x / 10;
        int rem = x % 10;
        int step = 0;
        int res = 0;
        while ( ans != 0 ){
            int length = (int)Math.floor(Math.log10(ans)) + 1;
            if ( ( res + rem * Math.pow(10,length)) > Integer.MAX_VALUE)
                return 0;
            res += rem * Math.pow(10, length);
            rem = ans % 10;
            ans = ans /10;
        }
        
        if ( (res + rem) > Integer.MAX_VALUE)
            return 0;
        res += rem;
        if (neg)
            res = 0-res;
        return res;
        
    }
}

别人的代码 觉得自己有点蠢

public class Solution {
    public int reverse(int x) {
        long result =0;
        while(x != 0)
        {
            result = (result*10) + (x%10);
            if(result > Integer.MAX_VALUE) return 0;
            if(result < Integer.MIN_VALUE) return 0;
            x = x/10;
        }
        return (int)result;


    }
}

他为什么可以先赋值再判断呢??!

看第二遍终于发现了 因为他用了long!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值