1. 程式人生 > >給定一個 32 位有符號整數,將整數中的數字進行反轉(java實現最全面的)

給定一個 32 位有符號整數,將整數中的數字進行反轉(java實現最全面的)

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

示例 1:

輸入: 123
輸出: 321

 示例 2:

輸入: -123
輸出: -321

注意:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。

我的解題思路:利用最後一位是翻轉後的第一位。取到最後一位後,然後利用這一位的十進位制表示法可以得到這一位在最高位時表示的整數。然後每一位的表示的整數相加就是最後翻轉的整數。在本演算法中需要注意的有兩點:1負的整數數字位數少一位 2負整數對10進行求返回的是負數。Math.pow(x,y)表示x的y次冪

class Solution {
    public int reverse(int x) {
        long a = 0;  
        int b =0;  
        if(x>=0){  
            b=(x+"").length();//正數  
            }  
        else{  
            b=(x+"").length()-1;//負數有一個負號
            }  
        while (x!=0){  
            for(int i=0;i<b;i++){  
                int a1 = x%10;//當前最後一位數字 ,負數則顯示的是負數-25%10 等於 -5 
                x=(x-a1)/10;//把最後一位數字剔除掉的新數字  
                a += (int) (a1*Math.pow(10,b-i-1));  //相當於將每次的最後一位乘以當前位在十進位制中的權重。234 = 2*10^2+3*10^1+4*10^0
            }  
        }  
        if((a>Math.pow(2,31)-1)||(a<(-1)*Math.pow(2,31))){  //超過範圍的返回0
            return 0;  
        }  
        return (int) a; 
        }
}