#include <iostream>
#include <math.h>
using namespace std;
// 設(shè) t(n) 表示為 123~n 的位數(shù)
// 則有 f(n) = f(n-1) + t(n)
int length = 80000;
int tn[80000];
// 計(jì)算一個(gè)數(shù)字的長(zhǎng)度,比如 12345678,則返回8
int getLength(int num) {
int length = 0;
while (num/10 != 0) {
num/=10;
length++;
}
return length + 1;
}
// 統(tǒng)一計(jì)算 tn[] 的值
void calculationTn() {
tn[0] = 0;
tn[1] = 1;
for (int i =1; i < length; i++) {
tn[i] = tn[i - 1] + getLength(i);
}
}
// 計(jì)算該數(shù)字的第 index 位的數(shù)字,比如 12345678 第三位數(shù),則返回 3(number、index 必須大于 0)
int getNumFromIntegerByIndex(int number, int index) {
int length = getLength(number);
for (int i = 0; i < length - index; i++) {
number/=10;
}
return number%10;
}
// 從123456789101112..中查找第 index 個(gè)數(shù)
int findFromNumber(int index) {
for (int t = 1; t < length; t++) {
if (index <= tn[t]) {
return getNumFromIntegerByIndex(t, index - tn[t - 1]);
}
}
return 0;
}
// 從完整數(shù)列(1 12 123 1234 12345 ....)中查找第 index 未數(shù)
int findFromWhole(int index) {
for(int i = 1; i < length; i++) {
if (index > tn[i]) {
index -= tn[i];
} else if (index < tn[i]) {
return findFromNumber(index);
} else {
//number == tn[i]
return getNumFromIntegerByIndex(i, getLength(i));
}
}
return 0;
}
int main(int argc, const char * argv[]) {
calculationTn();
int n, num;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &num);
printf("%d\n", findFromWhole(num));
}
}
Poj 1019
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 設(shè)計(jì)巧妙的枚舉題Counterfeit DollarTime Limit: 1000MS Memory ...
- 題目大意 給我們一個(gè)n×m的矩形格子,上面的值只有1和0,然后我們需要找到一個(gè)操作方式(即對(duì)哪些格子操作,對(duì)哪些格...
- 題意:第一個(gè)點(diǎn)是青蛙的坐標(biāo),第二個(gè)是青蛙妹子的坐標(biāo),其他的點(diǎn)是石頭的坐標(biāo),現(xiàn)在要問青蛙到青蛙妹子的地方,至少需要跳...
- 前言 本篇講的是dubbo中比較重要的遠(yuǎn)程暴露,鑒于上一篇dubbo源碼解析-本地暴露采用一圖勝千言的寫法好像讀者...