zju 1410

定义一个序列(无限长):
11212312341234512345612345671234567812345678912345678910...
看出规律来了吗?这个序列是有长度为1,2,3...k...的子序列Sk构成的,而Sk为1到k之间的数构成的。
现在给定一个数i,要求出这个序列中的第i个数
1<=i<=2147483647

用逐步逼近法,先求出第i个数在第几段中的第几个数,再求这个具体的数。

my code:
#include <iostream>
using namespace std;
int main(  ) {
    
int N,n,i,j,k;
    cin
>>N;
    
while( N-- ) {
    cin
>>n;
    i
=1;j=1;
    
while( n>i ) {
        n
-=i;
        j
++;
        k
=j;
        
while( k ) {
        i
++;
        k
/=10;
        }
    }
    i
=1;j=1;
    
while( n>i ) {
        n
-=i;j++;k=j;i=0;
        
while( k ) {
        i
++;
        k
/=10;
        }
    }
    
for( k=0;k<i-n;k++ ) j/=10;
    cout
<<j%10<<endl;
    }
    
return 0;
}



posted on 2007-07-25 20:49  woodfish  阅读(327)  评论(1编辑  收藏  举报

导航