這種數學題好難……
參考:(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 ...