整數(shù)反轉(zhuǎn)遇到的int越界問題

今天在力扣上碰到了一道題 寫一篇博客 順便練習一下markdown的語法

原題:

給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進行反轉(zhuǎn)。
注意:
假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?231, 231 ? 1]。請根據(jù)這個假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。


我的想法自然是轉(zhuǎn)成char[]數(shù)組 反轉(zhuǎn)數(shù)組再判斷有沒有越界

class Solution {
    public static int reverse(int x) {
        boolean positive = true;
        char[] a = String.valueOf(x).toCharArray();
        if ((int) a[0] == 45) {
            positive = false;
            a = Arrays.copyOfRange(a, 1, a.length);
        }
        System.out.println(Arrays.toString(a));
        for (int i = 0; i < a.length / 2; i++) {
            char b = a[i];
            a[i] = a[a.length - 1 - i];
            a[a.length - 1 - i] = b;
        }
        long c = Long.parseLong(new String(a));
        if (positive) {
            if (c > (1 << 31) - 1) {
                return 0;
            }
        } else {
            if (c > (1 << 31)) {
                return 0;
            }
            return -(int) c;
        }
        return (int) c;
    }

寫的麻煩了一點,可是一運行 輸入負數(shù) 答案卻出錯了 返回一個0,一檢查發(fā)現(xiàn)(1<<31)是一個負數(shù) int正整數(shù)最大取值是(1<<31)-1 int占4個字節(jié) 32位 最后一位是符號位 不注意經(jīng)常會出錯
可是要判斷負整數(shù)有沒有越界怎么辦呢?
我把判斷條件改成了c-1 > (1 << 31)-1, 結(jié)果正確了
然而提交的時候 卻提醒我編譯錯誤 不能返回(int)c ide中卻能正常運行 真是怪
我覺得是力扣的問題 用java經(jīng)常出錯

另一種思路:

這是我在評論區(qū)看的 很簡潔 :

  public static int reverse(int x) {
      int res = 0;
      int of = ((1 << 31) - 1) / 10;
      while (x != 0) {
          if (Math.abs(res) > ((1 << 31) - 1) / 10) return 0;
          System.out.println(res*10+"\t"+x%10 +"\t");
          res = res * 10 + x % 10;
          x /= 10;
          
      }
      return res;
  }

每輪都取最高位的數(shù)字 再做判斷是否越界
java中負數(shù)取值范圍比正數(shù)大一 我認為判斷絕對值有點問題?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java 中位運算符有與(&)、或(|)、非(~)、異或(^)、左移(<<)、右移(>>)、無符號右移(>>>),...
    JohnnyShieh閱讀 1,285評論 0 0
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,080評論 0 2
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,259評論 0 38
  • 第15天: 靜心5min,感受到胃不舒服,伸懶腰很舒服,打開窗戶后,晨間涼涼的 抑郁的毛團 琳說:有這樣的一個情緒...
    sarah4958閱讀 251評論 1 0
  • 1、迷路 高考倒計時,兩天。 藍玉平躺在自己的小床上,陽光從窗簾后面朦朦朧朧地灑在她蹄子上、小狗的頭擱在她的爪子上...
    靛玉紅閱讀 449評論 9 3

友情鏈接更多精彩內(nèi)容