zju 1410
定义一个序列(无限长):
11212312341234512345612345671234567812345678912345678910...
看出规律来了吗?这个序列是有长度为1,2,3...k...的子序列Sk构成的,而Sk为1到k之间的数构成的。
现在给定一个数i,要求出这个序列中的第i个数
1<=i<=2147483647
用逐步逼近法,先求出第i个数在第几段中的第几个数,再求这个具体的数。
my code:
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;
}
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;
}