Java整数反转

一、题目描述

5d3d7e338780472c95268817c97f3632.png 

二、我的狗屎思路与解题

、 当我看到这题后,我第一感觉是很简单,直接把int类型强转成String,接着一个循环倒置,最后再强转成int类型。✌,轻松化解!

class Solution {
    public int reverse(int x) {
        String res="";
        boolean plus=true;
        if (x<0){
            plus=false;
            x=-x;
        }
        String x1=x+"";
        System.out.println(x1.length());
        for (int i=x1.length()-1;i>=0;i--){
            res=res+x1.charAt(i);
        }
        if (plus==true){
            return Integer.parseInt(res);
        }else return -Integer.parseInt(res);
    }
}
  • 狗屎,很明显这样只能完成十位数以内的数字,超过时就会报错了

c9af64b8f75548768d61701f4748fdd4.png

  • 无奈,只能加上try catch
class Solution {
    public int reverse(int x) {
        String res="";
        boolean plus=true;
        if (x<0){
            plus=false;
            x=-x;
        }
        String x1=x+"";
        System.out.println(x1.length());
        for (int i=x1.length()-1;i>=0;i--){
            res=res+x1.charAt(i);
        }
        if (plus==true){
            try {
                return Integer.valueOf((new StringBuilder(res)).toString());
            } catch (Exception e) {
                return 0;
            }
        }else {
            try {
                return Integer.valueOf((new StringBuilder(res)).toString());
            } catch (Exception e) {
                return 0;
            }
        }
    }
}

二、另外一个解法(纯数学) 

class Solution {
    public int reverse(int x) {
        int res = 0;
        while(x!=0) {
            //每次取末尾数字
            int tmp = x%10;
            //判断是否 大于 最大32位整数
            if (res>214748364 || (res==214748364 && tmp>7)) {
                return 0;
            }
            //判断是否 小于 最小32位整数
            if (res<-214748364 || (res==-214748364 && tmp<-8)) {
                return 0;
            }
            res = res*10 + tmp;
            x /= 10;
        }
        return res;
    }
}			
  • 直接用除法求出
  • 还有一种解法是利用long,但是说我们不能用long存储最终结果,而且有些数字可能是合法范围内的数字,但是反转过来就超过范围了。假设有1147483649这个数字,它是小于最大的32位整数2147483647的,但是将这个数字反转过来后就变成了9463847411,这就比最大的32位整数还要大了,这样的数字是没法存到int里面的,所以肯定要返回0(溢出了)。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值