1. 程式人生 > >【leetcode】顛倒整數

【leetcode】顛倒整數

給定一個範圍為 32 位 int 的整數,將其顛倒。


例 1:

輸入: 123
輸出:  321
 
例 2:

輸入: -123
輸出: -321
 
例 3:

輸入: 120
輸出: 21
 
注意:!!!
假設我們的環境只能處理 32 位 int 範圍內的整數。根據這個假設,如果顛倒後的結果超過這個範圍,則返回 0。

思路:

迴圈將個位十位。。。取出,然後乘以迴圈乘以10;難點在於判斷顛倒之後是否超出INT32的最大最小值。

#define MAX     -((1<<(sizeof(int)*8-1))+1)
#define MIN     1<<(sizeof ( int ) * 8 - 1)

int reverse(int x) {
    int ret=0;
    while(x/10)
    {
        ret *=10;
        ret += x%10;        
        x /=10;
    }

    if(x)
    { 
        if(ret!=0 && MAX/abs(ret)<10)
        {
            return 0;
        }  
        ret *=10;
        ret += x%10;  
    }
    return ret;
}