7.整數反轉

題目:

給定一個 32 位有符號整數,將整數中的數字進行反轉。

示例 1:

輸入: 123
輸出: 321

 示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

思路:

思路很簡單,首先考慮最簡單的正數,每次除以10取餘得到最低位的數字,然後低位乘以10加上高位。

對於負數,先取相反數,按照正數的算法求得後再取相反數。

本題唯一需要注意的是:由於給定的輸入和返回值都是int型,需要考慮int最大值,避免出現溢出而計算錯誤。採用方法是判斷每次計算結果是否大於Integer.MAX_VALUE.

代碼:

    public static int reverse(int x) {
    	int sum = 0;
    	int temp = 0;
    	boolean flag = true;
    	if(x<0) {
    		x = -1*x;
    		flag = false;
    	}
        while(x>0) {
        	temp = x % 10;
        	x = x / 10;
        	if(sum > Integer.MAX_VALUE/10) {
        		return 0;
        	}
        	sum = sum * 10 + temp;
        }
        return flag?sum:sum*-1;
    }

注:判斷是否溢出使用sum > Integer.MAX_VALUE/10,而不能使用sum * 10 > Integer.MAX_VALUE,因爲sum爲int型,sum * 10求得結果仍爲int型,若sum * 10 > Integer.MAX_VALUE,則sum * 10已經發生了溢出,計算結果已經出錯了。也可將sum設爲long型變量,這樣就不會發生溢出,計算結果仍是正確的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章