7. Reverse Integer

題目簡介:
給一個整型數,將它逆置過來:

Example 1:

Input: 123
Output:  321
Example 2:

Input: -123
Output: -321
Example 3:

Input: 120
Output: 21

思路:

  1. 如果該數後面是連續的0,逆置過來沒有0,由於逆置之後也是數字,打印出來不會顯示。
  2. 考慮到整型逆置溢出的問題,有符號整數的範圍爲-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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章