//1_5_10: Number Sequence 求连续数组成的数组串的某位数 POJ1019 ZOJ1410
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
unsigned a[31270],s[31270];
void init()
{
int i;
a[1] = s[1] = 1;
for(i = 2;i < 31270;i ++)
{
a[i] = a[i - 1] + (int)log10((double)i) + 1;
s[i] = s[i - 1] + a[i];
}
}
unsigned calc(unsigned n)
{
int i = 1,len = 0,pos;
while(s[i] < n) i++;
pos = n - s[i - 1];
for(i = 1;len < pos;i ++) len += (int)log10((double)i) + 1;
return ((i - 1) / (int)pow((double)10,len - pos)) % 10;
}
int main()
{
int t;
unsigned i;
init();
scanf("%d",&t);
while(t --)
{
scanf("%d",&i);
printf("%d\n",calc(i));
}
return 0;
}
/*测试结果:通过POJ1019 ZOJ1410检测
2
79
1
65
9
请按任意键继续. . .
*/
POJ1019 ZOJ1410 Number Sequence
最新推荐文章于 2022-05-06 12:02:56 发布