日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将整型字符串转成整数值

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将整型字符串转成整数值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:給定一個字符串str,如果str符合日常書寫的整數形式,并且屬于32位整數的范圍,返回str所代表的整數值,否則返回0。

舉例:

  str = “123”,返回123。?
  str = “023”,因為不符合日常的書寫習慣,返回0。?
  str = “A123”,返回0。?
  str = “2147483647”,返回2147482647?
  str = “2147483648”,溢出,返回0。?
  str = “-123”,返回-123。

基本思路

  分為兩大步驟。第一步驟,判斷字符串的格式是否正確。第二步驟,如果符合書寫規范,將字符串轉換成整數型。

一.判斷字符串是否符合書寫規范。

如果str不以‘-’開頭,也不以數字字符開頭,返回False。
如果str以‘-’開頭,但是字符串的長度為1,或者字符串的第二個字符是0,返回False。
如果字符串以‘0’開頭,但是字符串的長度大于1,返回False。
如果步驟1~3都不返回False,遍歷str[1…N-1],如果有一個不是數字字符,返回False。如果都是數字字符,返回True。
二.將字符串轉換為整數型。

  32位整數的范圍是-2^31 ~ 2^31-1,最小整數的絕對值大,所以在轉換的過程中的絕對值一律以負數形式出現。具體過程如下:

1、使用布爾型變量posi來表示轉換的數字是正還是負,正為True,負為False,由字符串的第一個字符來確定posi的值。使用res變量來表示轉換的結果。

2、如果第一個字符是‘-’,從str[1]開始向右遍歷,否則從str[0]開始向右遍歷。假設遍歷到當前的字符的負數形式是cur,res = res × 10 + cur。遍歷的過程中統一使用負數形式,最后在根據posi的值確定最終的結果。

3、遍歷過程中如何判斷數字是否溢出?使用兩個變量,minq代表32位整數最小值除以10的商,minr表示32位整數最小值除以10的余數。在遍歷累加的過程中,如果發現res的值已經小于minq,那么再加上cur,則最終的結果一定溢出。如果res的值等于minq,又發現cur小于minr,則最終的結果也一定溢出。出現任意一種溢出的情況,直接返回0。

4、最后根據posi的值來確定數字的正負。注意如果res = -2^31,但是posi = True,此時正溢出,返回0。

5、為什么需要使用minq,minr的方式來判斷溢出而不直接和-2^31 ~,2^31-1比較?因為對于32位系統如果所累積的和超過這個范圍,計算機就已經無法表示,程序會直接報錯
6、很多人可能剛開始看的時候不太懂其中幾行代碼

if res < minq or (res == minq and cur < minr):return 0res = res * 10 + cur

注意通過分析通向公式是res = res * 10 + cur? 所以前面判斷的是倒數第二位,如果倒數第二位比之前/10的商小的話,那乘以10還是比最終的數小;如果倒數第二位相等cur比余數小,那同樣res也比結果小,返回0

def isValid(strs):if strs[0]=='-' and (len(strs)==1 or strs[1]==0):return Falseif strs[0]=='0' and len(strs)!=1:return Falseif strs[0]!='-' and (strs[0]) < '0' or strs[0] > '9'):retrun Falsefor i in range(1,len(strs)):if strs[i] < '0' or strs[i] > '9':return Falsereturn Truedef convert(strs):if strs == None or strs == '':return 0if not isvalid(strs):return 0minp = (-1 << 31) / 10minq = (-1 << 31) % 10cur = 0res = 0if strs[0] = '-':posi = Falseelse:posi = Truefor i in range(0 if posi else 1,len(strs)):cur = '0' - strs[i]if res < minp or (res == minp and cur < minq):return 0res = res * 10 + curif posi and res == (-1<<31):return 0return -res if posi else res

?

總結

以上是生活随笔為你收集整理的将整型字符串转成整数值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。