1. 程式人生 > >【LeetCode】7. 反轉整數 結題報告 (C++)

【LeetCode】7. 反轉整數 結題報告 (C++)

題目描述:

給定一個 32 位有符號整數,將整數中的數字進行反轉。

示例 1:

輸入: 123
輸出: 321

 示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

注意:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。

解題方法:
class Solution {
public:
    int reverse(int x) {
        long ans = 0;
        long a[100];
        int i = 0;
        while(x != 0){
            a[i] = x % 10;
            x /= 10;
            i ++;
        }
        for(int j = i - 1 , k = 1; j >= 0 ; j --){
            ans += a[j] * k;
            if(ans > INT_MAX || ans < INT_MIN)    return 0;
            k *= 10;
        }
        return ans;
    }
};

沒什麼意思,用long型別就好,判斷有沒有溢位。

記住INT_MAX和INT_MIN就好。

INT_MIN在標準標頭檔案limits.h中定義。

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)
  • 1
  • 2

在C/C++語言中,不能夠直接使用-2147483648來代替最小負數,因為這不是一個數字,而是一個表示式。表示式的意思是對整數21473648取負,但是2147483648已經溢位了int的上限,所以定義為(-INT_MAX -1)。

C中int型別是32位的,範圍是-2147483648到2147483647 。