劍指offer 序列中的某一位數字

2021-09-02 11:04:56 字數 1531 閱讀 9454

題目描述

數字以01234567891011121314…的格式序列化到乙個字串行中,在這個序列中,從0開始數,第5位是5,第13位是1,第19位是4,等等,請寫乙個函式,求任意第n位對應的數字。

求出每一位對應的數字總和,然後判斷。注意邊界條件不好處理時,可以採用while true的形式

class

solution

:def

countofintegers

(self, digit)

:if digit ==1:

return

10return9*

(10**(digit -1)

)def

beginnum

(self, digit)

:if digit ==1:

return

0else

:return

10**

(digit -1)

defgetdigit

(self, digit, index)

: beginnum = self.beginnum(digit)

endnum = beginnum +

int(index / digit)

leftindex = index % digit

endnumstring =

str(endnum)

return endnumstring[leftindex]

defdigitatindex

(self, index)

:if index <0:

raise exception(

'input error'

) digit =

1while

true

: numbers = self.countofintegers(digit)

if index < digit * numbers:

return self.getdigit(digit, index)

index -= numbers * digit

digit +=

1

print

(solution(

).digitatindex(0)

)print

(solution(

).digitatindex(1)

)print

(solution(

).digitatindex(9)

)print

(solution(

).digitatindex(13)

)print

(solution(

).digitatindex(19)

)print

(solution(

).digitatindex(

1001))

>>

>>01

9147

《劍指Offer》44 數字序列中的某一位數字

無 數字以 0123456789101112131415 的格式序列化到乙個字串中,求這個字串的第 index 位。第5位是5,第13位是1,第19位是4等等 假設index 1001 序列的前10位是0 9這10個只有一位的數字,顯然1001在這10個數字之後,因此這10個數字可以直接跳過,我們再...

彙編一位數加法

源於朱耀庭老師的 組合語言程式設計 清華大學出版社 大體思路 把結果看成兩位十進位制,add之後把結果除以10,商儲存到al,餘數儲存到ah,有進製結果顯示正常,沒有進製則高位顯示零,低位顯示結果 在32位win7下masm5編譯通過 mov dl,2號功能呼叫顯示問號 mov ah,02h int...

劍指offer 數字序列中某一位的數字

數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式求任意位對應的數字。主要思路 舉例分析,比如找第1001位數字,1 1位數的數值有10個 0 9,數字為10 1 10個,顯然100...