題目描述:
給出一個(gè) 32 位的有符號(hào)整數(shù)穷吮,你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)逻翁。
示例?1:
輸入: 123
輸出: 321
?示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設(shè)我們的環(huán)境只能存儲(chǔ)得下 32 位的有符號(hào)整數(shù),則其數(shù)值范圍為?[?231,? 231?? 1]酒来。請(qǐng)根據(jù)這個(gè)假設(shè)卢未,如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。
解法:
主要要考慮到溢出的問題
通過循環(huán)將數(shù)字x的每一位拆開,在計(jì)算新值時(shí)都判斷是否溢出
溢出條件有兩個(gè):一個(gè)是大于整數(shù)的最大值Integer.MAX_VALUE,一個(gè)是小于整數(shù)最小值Integer.MIN_VALUE
設(shè)當(dāng)前計(jì)算結(jié)果為ans辽社,下一位為pop
1.從ans * 10 + pop > MAX_VALUE這個(gè)溢出條件來看
當(dāng)出現(xiàn) ans > MAX_VALUE / 10 且 還有pop需要添加 時(shí)伟墙,則一定溢出
當(dāng)出現(xiàn) ans == MAX_VALUE / 10 且 pop > 7 時(shí),則一定溢出滴铅,7是2^31 - 1的個(gè)位數(shù)
2.從ans * 10 + pop < MIN_VALUE這個(gè)溢出條件來看
當(dāng)出現(xiàn) ans < MIN_VALUE / 10 且 還有pop需要添加 時(shí)戳葵,則一定溢出
當(dāng)出現(xiàn) ans == MIN_VALUE / 10 且 pop < -8 時(shí),則一定溢出汉匙,8是-2^31的個(gè)位數(shù)