【FOJ】Problem 1390 Infinite String

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++)	//k不为0,降到要输出的那个位,k为0则直接是最后一位
			x = x/10;
		x = x%10;
		printf("%d\n", x);
	}
	return 0;
}
发布了46 篇原创文章 · 获赞 0 · 访问量 461

猜你喜欢

转载自blog.csdn.net/qq_44531167/article/details/105420748
今日推荐