題目簡介:
給一個整型數,將它逆置過來:
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
思路:
- 如果該數後面是連續的0,逆置過來沒有0,由於逆置之後也是數字,打印出來不會顯示。
- 考慮到整型逆置溢出的問題,有符號整數的範圍爲-2147483648~2147483648,考慮到2000000009,逆置之後變爲9000000002,已經超出範圍。
自己的思路:感覺雖然做出來了,但是代碼看起來不美觀。
class Solution {
public:
int reverse(int x) {
bool flag = false;
//判斷是否爲負數
if(x < 0)
flag = true;
//如果是負數,先變爲正數
if(flag)
x = 0 - x;
//考慮溢出用long來存儲逆置後的數
long y = 0;
while(x > 0)
{
y = y*10 + x %10;
x /= 10;
}
//判斷是否超過整型表示的最大值
if(y > INT_MAX)
return 0;
//如果X爲負數,則轉化爲負數輸出
if(flag)
y = 0 - y;
return y;
}
};
網上參考答案:比我的代碼精美的多~
class Solution {
public:
int reverse(int x) {
// 先分離出x的數值部分和符號部分
int y = abs(x), z = x == y ? 1 : -1;
// 將y反向放於一個long中,這樣可以避免越界
long tmp = 0;
while (y) {
tmp = tmp * 10 + y % 10;
y /= 10;
}
// 判斷是否越界
if (z*tmp > INT_MAX || z*tmp < INT_MIN) return 0;
// 否則返回翻轉後的值
return z*tmp;
}
};