Problem 1390 Infinite String .
题意
序列:144449999999991616161616161616161616161616161625… 给出序列号n(0 < n < 10^9),问那个位置上的字符是什么
思路
Memory Limit Exceed 的思路 字符数组强行……① 用数组存放每个数字的平方数 ② 对每个输入的n,遍历平方数数组,使n减去(平方数×平方数的位数),直到再往下减n会小于等于0为止(确定n是在哪个平方数的范围内) ③ n对此时平方数的位数取余,求得n是该组不知道第几个平方数的第k位 ④ 输出该平方数的第k位数字
代码
#include <cstdio>
using namespace std;
int table[ 1010 ] ;
void init_table ( ) {
int x;
for ( int i= 1 ; i<= 1000 ; i++ )
table[ i] = i* i;
}
int my_len ( int x) {
int len = 0 ;
while ( x!= 0 ) {
len++ ;
x = x/ 10 ;
}
return len;
}
int main ( ) {
init_table ( ) ;
int n, x, len, k;
while ( scanf ( "%d" , & n) != EOF ) {
if ( n== 0 )
break ;
for ( int i= 1 ; ; i++ ) {
x = table[ i] ;
len = my_len ( x) ;
if ( n<= x* len)
break ;
n - = x* len;
}
k = n% len;
for ( int i= k; i< len && k!= 0 ; i++ )
x = x/ 10 ;
x = x% 10 ;
printf ( "%d\n" , x) ;
}
return 0 ;
}