題目描述:
給定一個 32 位有符號整數,將整數中的數字進行反轉。
示例 1:
輸入: 123 輸出: 321
示例 2:
輸入: -123 輸出: -321
示例 3:
輸入: 120 輸出: 21
注意:
假設我們的環境只能存儲 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。根據這個假設,如果反轉後的整數溢出,則返回 0。
思路:就是不斷的取餘和整除,然後構造新的值。不論是構造還是把負數換成正數,都要注意防止溢出,即構造一個更大的臨時變量。
代碼如下:
class Solution {
public:
int reverse(int x) {
if(x>=-9 && x<=9)
return x;
long long new_x=x;
if(x<0)
new_x=-new_x;
vector<int> bits;
int rest=0, times=0;
while(new_x!=0){
rest = new_x%10;
bits.push_back(rest);
times++;
new_x=new_x/10;
}
long long new_v = 0, j=1;
for(int i=times-1; i>=0; --i){
new_v += bits[i]*j;
j=j*10;
}
if(x>=0){
if(new_v>INT_MAX)
return 0;
}
else{
new_v=-new_v;
if(new_v<INT_MIN)
return 0;
}
return new_v;
}
};