转载:力扣:整数翻转(难点:整数溢出)
(力扣)LeetCode刷題之整數反轉
陳鵬既存一息,多言無益。?關注他8 人贊同了該文章給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123 輸出: 321示例 2:
輸入: -123 輸出: -321示例 3:
輸入: 120 輸出: 21注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值范圍為 [?2^31, 2^31 ? 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。
臥槽,又是簡單題,簡單個毛線啊,對于我這種菜雞來說,真的好難呀!!!
我的思路一開始就是笨辦法,把數字轉換成字符串,然后判斷是否是正數,負數,最后轉換以后看是否在[-2^31,2^31-1]范圍內,但是好像不行啊,用什么來接收轉換后的數字呢?環境只允許存儲32位的有符號數,不能使用long64位的來接收啊????
力扣(LeetCode)官方給出的解題方式如下:
我勒個去啊,這TM的就是一道數學題啊!!!
理下思路吧:
官方給出的思想是“彈出”和“推入”
首先是彈出:
/pop operation: //彈出 pop = x % 10; //取余運算,得到一個數字最后一位,得到數字符號和x的一致 x /= 10; //接上步得到最后一位數字,該數字不要最后一個數字了例如:數字3456
pop = 3456 % 10= 6
x /=10 → x = 3456/10 = 345
推入:
//push operation://推入 temp = rev * 10 + pop; //rev一開始是0 rev = temp;例如:接上面的
temp = 6
rev = 6
重復上面的“彈出”,“推入”操作,就可以完成數字的反轉
但是,問題也來了,防止溢出,所以肯定得有個條件的嘛,2^31-1的值為:2147483647,將近21億多,當作圓周率記一下吧,要是我有這么多錢就好了,-2^31的值為:-2147483648
如果:“彈出”和“推入”得到的rev的數值>int類型的最大值/10,就不可能成功了,肯定溢出,例如:rev = 214748365,他下一次“推入”的數字不管是多少肯定比2^31-1大,
或者rev的數值=int類型的最大值/10 ,那么“彈出”的數字>7,也不行
負數的同理
總結:學渣的我能理解也不容易吧,還好數學思維好,┭┮﹏┭┮,只能慢慢來了,其他的方法以后再補充吧,感覺做這種題好燒腦啊......
發布于 2019-02-25力扣(LeetCode)?贊同 8??3 條評論?分享?喜歡?收藏?贊同 8?分享總結
以上是生活随笔為你收集整理的转载:力扣:整数翻转(难点:整数溢出)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vector拷贝复制方法
- 下一篇: 转载:vscode快捷键