poj 1019 Number Sequence

来源:互联网 发布:炒白银数据指数 编辑:程序博客网 时间:2024/04/26 12:07
#include <iostream>#include <stdio.h>using namespace std;int D[100001];int get_digit(int k) //k占用几位{if(D[k] !=  0)return D[k];int tk=0;while(k>0){tk++;k /= 10;}D[k] = tk;return D[k];}int get_in_k(int k,int M)//在Dk寻找第M个位置的数字{int i=1;//printf("init k=%d M=%d\n",k,M);while(M> get_digit(i)){M -= get_digit(i);i++;}int l = get_digit(i) +1 - M; //M是从左边,即高位在i中寻找第M个数字。 l是从右边即低位寻找第M个数组//printf("k=%d M=%d l=%d i=%d\n",k,M,l,i);while( l > 1){i /= 10;l--;}return i%10;}int solve(int M){int k=1;int l=1;while( M > l){M -= l; //l是Sk占用的位数,SK占用的位数是SK-1占用位置 +k占用的位数 //l++;k++;l += get_digit(k);}return get_in_k(k,M);}int main(){int n;cin>>n;for(int i=1;i<=n;i++){int M;cin>>M;cout<<solve(M)<<endl;}}

原创粉丝点击