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 ;
}



你可能感兴趣的:(zju 1410)