首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 數字反轉算法:取模除法與邊界處理的標準實現

     編輯:Java 相關知識

核心邏輯:逐位拆解 + 逆序組裝

利用 % 10 取個位,/ 10 右移去個位,將拆解出的數字按順序疊加構成反轉數:

public class NumberReverser {

    public static int reverse(int num) {
        int reversed = 0;
        while (num != 0) {
            int digit = num % 10;       // 取最低位
            reversed = reversed * 10 + digit; // 往高位疊加
            num /= 10;                  // 右移去掉最低位
        }
        return reversed;
    }

    public static void main(String[] args) {
        System.out.println(reverse(12345));   // 54321
        System.out.println(reverse(-678));    // -876
        System.out.println(reverse(1000));    // 1 (前導零自動丟棄)
        System.out.println(reverse(0));       // 0
    }
}

關鍵細節與邊界處理

場景處理方式說明
負數直接帶入算法Java % 保留被除數符號,-678 % 10 = -8,邏輯自洽
尾部零自然丟棄1000 → 1,符合整數語義
溢出需額外檢查反轉後超出 Integer.MAX_VALUE 會溢出,生產代碼需判斷
輸入 0while 不進入,直接返回 0邊界正確

防溢出生產級寫法

public static int reverseSafe(int num) {
    int reversed = 0;
    while (num != 0) {
        int digit = num % 10;
        // 溢出檢查:reversed * 10 + digit 是否超出 int 範圍
        if (reversed > Integer.MAX_VALUE / 10 || 
            (reversed == Integer.MAX_VALUE / 10 && digit > 7)) return 0; // 或拋異常
        if (reversed < Integer.MIN_VALUE / 10 || 
            (reversed == Integer.MIN_VALUE / 10 && digit < -8)) return 0;
        reversed = reversed * 10 + digit;
        num /= 10;
    }
    return reversed;
}

LeetCode 7 題標準解法,面試必背。

字符串法對比(不推薦生產用)

// 簡單但有性能開銷:對象創建、字符數組拷貝
public static int reverseStringWay(int num) {
    String s = new StringBuilder(String.valueOf(num)).reverse().toString();
    return Integer.parseInt(s); // 負號會跑到末尾需額外處理
}

總結

數字反轉的標準解法是 %10 /10 迭代,時間 O(log n)、空間 O(1)。掌握溢出邊界檢查、負數語義、前導零特性,是基本功考察的高頻考點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved