給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例1
輸入123
輸出321
示例2
輸入-123
輸出-321
示例2
輸入120
輸出21
注意:
假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。
主要思路就是進行取餘然後對得到的數×10不斷累加。一開始由於經驗不足,加了乙個先把輸入的函式取絕對值在進行計算,利用乙個bool函式來儲存是否新增負號,後來在測試中發現,可以直接不用這些取絕對值以及儲存就行。
要防止是乙個溢位問題,在實際測試中,遇到了如下問題。
runtime error: signed integer overflow:
964632435
*10 cannot be represented in type 'int'
(solution.cpp)
那根據搜尋發現這是乙個溢位問題,一開始想用long之類的來解決後來發現題目要求的是32位 所以解決方法應該是設定一些邊界以及判斷條件來決定是否超過邊界了
通過對一開始方法的分析,當目標變數*10超過231 − 1時,那麼就會變成溢位的情況,所以要對最大值和最小值進行討論。
以最大值為例,我們設返回值為b,那麼有:
當 b*10>max
10\frac
10max
時,無論餘數m如何,都會溢位
當b*10 = max
10\frac
10max
時,餘數m需要<7,才能不會溢位。
同理,當為最小值的時候,兩種情況的判定條件要反過來,且情況二中的數字應該變為-8(因為不存在-1)
class
solution
return b;}}
;
leetcode反轉整數
題目 反轉整數 給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 2 31,231 1 根據這個假設,如果反轉後的整數溢...
leetcode 整數反轉
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321示例 2 輸入 123 輸出 321示例 3 輸入 120 輸出 21注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數...
LeetCode 整數反轉
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。題目並不難,重點在於處理溢位問題。int max 2147483647 int min...