題目來源:
題目分析:
本文是給定一個32位的有符號數,讓我們將其逆序輸出。它給定了這樣的幾個例子:
由它給的例子,我們可以注意到在實現程序時要注意符號位是正常輸出的,此外倒序過來有可能會0來打頭,這個也是不允許的。看到這個題目,我一開始想用reverse()來做,然後一直在考慮怎樣可以省略前面的0,直到參考了其它人的程序才直到本人果然是菜鳥!在實現程序時,知道一下幾點程序就可以順利的寫出了!
1.reverse函數的使用範圍
reverse()函數是用於反向列表中的元素,對於其它的對象是不適用的,因此本題最好的方法不是採用reverse()。關於逆序,我們還可以想到切片的方法,可以進行切片的對象是字符串,列表,元組,同樣不包含整數,所以本題我們要注意將整數型數據轉化成字符串類型的數據(str(),int())
2.關於逆序後多餘0的情況
由於最後我們在進行逆序操作後,返回值爲整型,因此會有將字符型轉化爲整形的操作,經過編譯,可以發現int()函數自動將前面多餘的0給刪去了,因此不需要考慮如何去除前面的0。
3.關於32位有符號數的取值範圍
我在寫程序的時候,將其範圍寫成了-2**31~2**32,結果始終通不過編譯,經查詢才知道其範圍應該是-2**32/2~(2**32)/2-1,這是需要萬分注意的。
實驗代碼:
注意了以上幾點後,所寫的代碼如下:
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if(x<0):
y=-1*int((str(-x))[::-1])
else:
y=int((str(x))[::-1])
if (y>(2**32/2-1) or y<(-(2**32/2))):
y=0
return (y)