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

2021-09-24 14:52:08 字數 1641 閱讀 6504

這種數學題好難……

參考:(1) 理解題意

以第15位數字2為例(2隸屬與12,兩位數,位於12從左側以0號開始下標為1的位置)

步驟1:首先確定該數字是屬於幾位數的;

如果是一位數,n<9;如果是兩位數,n<9+90*2=189;

說明是兩位數。

步驟2:確定該數字屬於哪個數。10+(15-10)/2= 12。

步驟3:確定是該數中哪一位。15-10-(12-10)*2 = 1, 所以位於「12」的下標為1的位置,即數字2。

以第1001位數字7為例

步驟1:首先確定該數字是屬於幾位數的;

如果是一位數,n<9;如果是兩位數,n<9+902=189;如果是三位數,n<189+9003=2889;

說明是三位數。

步驟2:確定該數字屬於哪個數。100+(1001-190)/3= 370。

步驟3:確定是該數中哪一位。1001-190-(370-100)*3 = 1,所以位於「370」的下標為1的位置,即數字1。

注意第0位是0,第9位是9,第10位是1,,

參考(2)

f(m)表示長度為m的數 的 所有數字之和。

**(先記住吧……)

#include

#include

#include

#include

using

namespace std;

#define max_len 9

long

long f[10]

;int

solve

(int n)

int res = n - f[i-1]

;int tmp1 = res/i;

int tmp2 = res%i;

// cout<

long t*** = tmp1 +

pow(

10,i-1)

;// cout<

(int

)(t***/

(pow(10

,i-tmp2-1)

))%10

;}intmain()

//for (int i=0;i<10;i++)cout

(int i=

9;i<

16;i++

)getchar()

;return0;

}

另外,在

還給出了一道 「逆」 過來的題

上面是求第幾位的數字,

現在,求,已知乙個數字,求 1-當前共有幾位。

f(m)含義不變

還有一道數學題,美團的:

意思是用給出的字串,找出最小不能表示的數字:

思路:

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

題目描述 在無限的整數序列 1,2,3,4,5,6,7,8,9,10,11,中找到第 n 個數字。數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從0開始計數,即從第0位開始 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應...

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

思路 求該數字所在的資料範圍,即屬於幾位數 求該數字的具體數值,是多少 找出所求是數字中的第幾位,求出數字中對應的那一位 param n return var findnthdigit function n let digit 1,count 10,numcount 10 求出是digit位數 wh...

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

劍指 offer 44.數字序列中某一位的數字 數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從下標0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應的數字。示例 1 輸入 n 3 輸出 3 示例 2 輸入 n ...