- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #define max 31270
- using namespace std;
- unsigned int a[max];
- unsigned int s[max];
- void start()
- {
- int i,j;
- a[1]=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];
- }
- }
- int res(int n)//预处理,不断缩小范围
- {
- int i=1,j=1;
- int m=0;
- int len=0;
- for(i=1; i<31270; i++)
- {
- if(s[i]>=n)
- break;
- }
- int pos=n-s[i-1];
- for(j=1; len<pos; j++)
- {
- len+=(int)log10((double)j)+1;
- }
- return ((j-1)/(int)pow(10.0,len-pos))%10;
- }
- int main()
- {
- int t;
- int test;
- cin>>t;
- start();
- while(t--)
- {
- cin>>test;
- cout<<res(test)<<endl;
- }
- return 0;
- }
poj Number Sequence
最新推荐文章于 2017-07-16 09:23:46 发布
本文介绍了一个算法问题,即如何在一个无限增长的数字序列中找到指定位置的数字。该序列由一系列逐渐增大的数字群组成,每个群包含从1到k的所有整数连接而成。文章通过示例展示了序列的特点,并提供了一段C++代码实现,用于解决给定位置i处的数字求解问题。

545

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



