整數(shù)反轉(zhuǎn)
給你一個(gè) 32 位的有符號(hào)整數(shù) x 悼嫉,返回將 x 中的數(shù)字部分反轉(zhuǎn)后的結(jié)果艇潭。
如果反轉(zhuǎn)后整數(shù)超過(guò) 32 位的有符號(hào)整數(shù)的范圍 [?231, 231 ? 1] ,就返回 0。
假設(shè)環(huán)境不允許存儲(chǔ) 64 位整數(shù)(有符號(hào)或無(wú)符號(hào))蹋凝。
-
處理整數(shù)反轉(zhuǎn): 使用模運(yùn)算每次得到整數(shù)的個(gè)位數(shù)鲁纠,然后再將中間結(jié)果除以10。這樣下一次模運(yùn)算時(shí)就能得到十位數(shù)鳍寂。
使用模運(yùn)算除法運(yùn)算得到個(gè)位數(shù) -
第一種方法:借助更高位數(shù)類型數(shù)據(jù)保存反轉(zhuǎn)結(jié)果改含,再反轉(zhuǎn)結(jié)束后,判斷結(jié)果是否溢出迄汛。
借助long等64位保存中間結(jié)果 -
在之前的題目要求中并沒有限制不能使用更高位數(shù)類型中間變量捍壤。如果限制隔心,我們只能使用32位整數(shù)來(lái)進(jìn)行操作又該如何正確判斷溢出呢白群?
首先,32位能表達(dá)的最大整數(shù)分別為:2147483647硬霍, -2147483648帜慢。
32位最大最小數(shù)范圍 -
那么在對(duì)反轉(zhuǎn)后結(jié)果進(jìn)行乘以10之前,我們首先判斷結(jié)果是否會(huì)溢出唯卖。然后再進(jìn)行運(yùn)算粱玲,解法如下圖所示:
實(shí)際反轉(zhuǎn)過(guò)程 -
尤其要說(shuō)明的是,我們無(wú)需對(duì)負(fù)數(shù)特別處理拜轨。負(fù)數(shù)模運(yùn)算返回為負(fù)值抽减,所以不管正數(shù)或負(fù)數(shù),都直接循環(huán)模運(yùn)算獲取個(gè)位數(shù)即可橄碾。
不用單獨(dú)處理負(fù)數(shù)