1. 程式人生 > >LeetCode :C語言 7.反轉整數

LeetCode :C語言 7.反轉整數

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

例如:321-->123

           -321-->-123

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

最初我沒有頭緒,所以我在網上尋找了其他人的答案。

我按照這位博主的想法:1.利用輸入值x進行(x%10)操作來取個位,在(x/10)操作刪去個位,並在下一次迴圈中((變數*10)+x)來獲得結果。

2.利用反推法驗證是否溢位(若反推成功則不溢位)

int reverse(int x)
{
    int out = 0;
    while(x)
    {
        int temp = out*10 + x%10;
        if((temp-x%10)/10) != out)      
        {
            return 0;
        }
        x = x/10;
        out = temp;
    }
    return out;
}

但這個結果提交後只超越了百分之7的玩家,所以我有思考了一下。

最後我發現判定條件是可以更改了,沒必要固定的反推,因為temp會進行/10操作,所以(temp-x%10)操作太繁瑣了,所以我改了一下。

int reverse(int x)
{
    int out = 0;
    while(x)
    {
        int temp = out*10 + x%10;
        if(temp/10 != out)       
        {
            return 0;
        }
        x = x/10;
        out = temp;
    }
    return out;
}

(這個更改速度上升了60%,超過了50%的人,這個提升超出我的預期了。)

收貨:

1.學到也整形資料反轉的一種很棒的方法。

2.瞭解了發推的思想,並且感受到了簡單的程式改動帶來的影響。