題目描述
數字以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...