zoukankan      html  css  js  c++  java
  • 【Leetcode-easy】Reverse Integer

      思路:取绝对值,反转,并判断反转的结果是否大于最大整数,需要注意的细节:判断时需要这样: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     }
  • 相关阅读:
    《信息学奥赛一本通》提高版题解索引
    QUERY [ 单调栈 ]
    [ 模拟退火 ] bzoj3860 平衡点
    [ 考试 ] 7.12
    离线和简单分治
    [ 校内OJ ] NOIP2019模拟赛(九)
    校内模拟考 (一)
    Codeforces 808E
    学习笔记—点分治
    [ 线段树+哈希 ] 反等差数列
  • 原文地址:https://www.cnblogs.com/scecit/p/4969224.html
Copyright © 2011-2022 走看看