1. 題目描述:
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢出那麼就返回 0。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
2. 解題思路:
自己的解題思路:
int reverse(int x){
char data[32] = "";
int len = 0, temp = 0;
long int y = 0;
sprintf(data, "%d", x); //change x to string
len = strlen(data); //get string's length
if (data[0] == '-')
temp = 1;
y = 0;
for(len; len>temp;) {
y = y*10 + ((data[--len]-48)); //char to int, need to reduce 48
}
if (temp)
y = -y;
if (y > 2147483647 || y < -2147483648)
return 0;
return y;
}
目前瞭解的比較優秀的解題思路:
int reverse(int x){
long count=0;
while(x){
count=count*10+x%10;
x=x/10;
}
return count>INT_MAX||count<INT_MIN? 0 : count;
}
3. 知識點總結:
a. 數學方法.
注意: 負數對10取餘數後, 也爲負數.
負數0至-9,對10去除 /的結果爲0.
b. 整形最大值最小值判斷方法.
方法一:
可以用INT_MAX或者INT_MIN判斷.
count>INT_MAX||count<INT_MIN
方法二:
可以用強制類型轉換判斷:
eg: count != (int)count ? 0 : count;