給出一個(gè) 32 位的有符號(hào)整數(shù)畔派,你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設(shè)我們的環(huán)境只能存儲(chǔ)得下 32 位的有符號(hào)整數(shù)润绵,則其數(shù)值范圍為 [ ?2^31^, 2^31^?1]线椰。請根據(jù)這個(gè)假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0尘盼。
- 由于" 32位的有符號(hào)整數(shù)x "的取值范圍為[ -231憨愉,231-1],因此需要分三種情況討論:(1)x < 0 卿捎;(2)x = 0配紫;(3)x > 0;
- 對于整數(shù) x 的反轉(zhuǎn)問題午阵,可采取對 x 取余躺孝,最終結(jié)果 result = (result * 10 + x 的余數(shù))的方法;
- 在C語言中INT_MIN = -231 = -2147483648 底桂,INT_MAX = 231-1 = 2147483647 植袍;
- 因此,當(dāng)x <= -231 或者 x >= 231-1時(shí)籽懦,溢出于个。
int reverse(int x){
int r = 0,result = 0,temp = INT_MAX / 10;
bool flag = true;
if(x == 0||x == INT_MAX||x == INT_MIN){
return 0;
}
if(x < 0){
flag = false;
x = -x;
}
while(x){
if(result == temp && ((flag && r > 7)||(!flag && r > 8))){
return 0;
}
if(result > temp){
return 0;
}
r = x % 10; /* x 的最低位 */
result = result * 10 + r;
x = x / 10;
}
return flag ? result : -result;
}
提交記錄.png