Number Sequence
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 35251 | Accepted: 10151 |
Description
A single positive integer i is given. Write a program to find the digit located in the position i in the sequence of number groups S1S2...Sk. Each group Sk consists of a sequence of positive integer numbers ranging from 1 to k, written one after another.
For example, the first 80 digits of the sequence are as follows:
11212312341234512345612345671234567812345678912345678910123456789101112345678910
For example, the first 80 digits of the sequence are as follows:
11212312341234512345612345671234567812345678912345678910123456789101112345678910
Input
The first line of the input file contains a single integer t (1 ≤ t ≤ 10), the number of test cases, followed by one line for each test case. The line for a test case contains the single integer i (1 ≤ i ≤ 2147483647)
Output
There should be one output line per test case containing the digit located in the position i.
Sample Input
2
8
3
Sample Output
2
2
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define N 32000
using namespace std;
int main()
{
int a[]= {,,,,,,,,};
long long b[N]= {},n,sum=;
int i,T,m,j,l,A,B;
for(i=; i<N; i++)
{
if(i<=)
b[i]=i;
else
{
m=;
l=(int)log10(i)+;
for(j=; j<l; j++)
{
m=m*+;
}
b[i]=(i-m)*l+b[m];
}
// sum+=b[i];
}
// printf("%lld\n",sum);确定b数组的范围,即N的大小;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
for(i=;i<N;i++)
{
if(n>b[i])
{
n-=b[i];
}
else
{
break;
}
}
for(i=;i<;i++)
{
if(n>a[i])
n-=a[i];
else
break;
}
A=n/i;
B=n%i;
if(B!=)
A+=;
else
B=i;
m=;
for(j=;j<i;j++)
m=m*+;
A=A+m;
char str[]= "";
sprintf(str,"%d",A);
printf("%c\n",str[B-]);
}
return ;
}