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