机器学习之路漫漫
MLEW(Maching Learning & Endless Way)

导航

 

  思路:取绝对值,反转,并判断反转的结果是否大于最大整数,需要注意的细节:判断时需要这样:result > (Integer.MAX_VALUE - v) / 10 否则result * 10 + v% 10 > Integer.MAX_VALUE左边会直接出现溢出。最后加上符号位。

 1     public int reverse(int x) {
 2         if(x==Integer.MIN_VALUE){
 3             return 0;
 4         }
 5         //然后取绝对值,判断绝对值不大于Integer.MAX_VALUDE,不能直接用result拼接判断,否则会溢出。
 6         //例如result * 10 + v% 10 > Integer.MAX_VALUE ,result为反转结果,v为最后一位,也是上一个原始数截取的余数.
 7         //左边很可能就会溢出,因此需要反转来判断 :result > (Integer.MAX_VALUE - v) / 10  
 8         int absx=Math.abs(x);
 9         int result=0;
10         while(absx!=0){
11             int v=absx%10;    //余数,作为反转后的连接位
12             if(result>(Integer.MAX_VALUE-v)/10){
13                 //溢出
14                 return 0;
15             }
16             //如果不溢出,则连接下一位
17             result=(result*10+v);
18             absx/=10;    //原始数去掉最后一位,重复上述截取连接步骤
19         }
20         //如果原始数为负数,则返回负数,否则直接返回
21         return x>0?result:-result;
22         
23     }

 

posted on 2015-11-16 16:13  suchang  阅读(145)  评论(0编辑  收藏  举报