//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
最新推荐文章于 2018-01-05 09:41:27 发布
本文提供了一个高效的C++程序解决方案,用于解决NumberSequence问题(POJ1019/ZOJ1410),该问题要求找出由连续整数组成的序列中特定位置的数字。程序首先初始化一个数组来存储关键数值,然后使用calc函数找到指定位置的数字。

1495

被折叠的 条评论
为什么被折叠?



