題目:
給定一個 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型變量,這樣就不會發生溢出,計算結果仍是正確的。