LeetCode :C語言 7.反轉整數
阿新 • • 發佈:2018-12-15
題目:給定一個 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.瞭解了發推的思想,並且感受到了簡單的程式改動帶來的影響。