題目描述
給定一個 32 位有符號整數,將整數中的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能存儲 32 位有符號整數,其數值范圍是 [−231, 231 − 1]。根據這個假設,如果反轉后的整數溢出,則返回 0。
解題思路
反轉整數的思路是從一個數的最后一位開始,依次向前遍歷,每次反轉整數依次左移一位,並取出一位數作為新數的末位數。具體而言首先定義反轉以后的數res初始為0,當x不為0時循環:
- 記錄temp=res*10+x%10,此時temp即為遍歷到當前位之前的反轉整數
- 然后比較temp/10與res是否相等,如果整數不溢出顯然相等,否則說明反轉后的整數溢出,直接返回0
- 最后把temp賦值給res,並令x=x/10,即去掉最后一位,繼續反轉之前的數字
代碼
1 class Solution { 2 public: 3 int reverse(int x) { 4 int res = 0; 5 while(x){ 6 int temp = res * 10 + x % 10; 7 if(temp / 10 != res) 8 return 0; 9 res = temp; 10 x /= 10; 11 } 12 return res; 13 } 14 };