题目大意:
数列按照S1S2S3...的顺序排列,其中,Si=123...i,比如11212312341234512345612345671234567812345678912345678910123456789101112345678910,要求算出第N个数字是什么,比如,第80个是0。
数列的增长速度是可以模拟的,先找出要求的数字在第几个数列里面,然后再在数列里面找到要找的数字。
模拟题,写着复杂,解释的也复杂。(-。-)
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int a[200][200];
int n,m,boo,num,k,zen,now,pas;
int main()
{
scanf("%d",&n);
while (n--)
{
scanf("%d",&m);
zen = 1;
num = 0;
now = 0;
for (int i = 1 ;; i ++)
{
now += zen;
num += now;
if (i==9||i==99||i==999||i==9999||i==99999||i==999999||i==9999999||i==99999999) zen++;
if (num >= m) {
num -= now;
boo = i;
break;
}
}
k = m - num;
zen = 1;
for (int i = 1 ; i <= boo ; i ++)
{
k -= zen;
if (k <= 0) {
k += zen;
pas = log10((double)i);
for (int j = k ; j <= pas ; j ++)
i /= 10;
printf("%d\n",i%10);
break;
}
if (i==9||i==99||i==999||i==9999||i==99999||i==999999||i==9999999||i==99999999) zen++;
}
}
return 0;
}