Problem B
Number Sequence
Input: standard input
Output: standard output
Time Limit: 1 second
A single positiveinteger iis given. Write a program to find the digitlocated in the position iin the sequence of number groups S1S2…Sk. Each group Sk consists of a sequence of positive integer numbers ranging from 1to k, written one after another. For example, the first 80 digitsof the sequence are as follows:
11212312341234512345612345671234567812345678912345678910123456789101112345678910
Input
The first line ofthe input file contains a single integer t (1 <=t <=25), thenumber of test cases, followed by one line for each test case. The line for atest case contains the single integer i (1 <=i <=2147483647)
Output
There should be one output line per test casecontaining the digit located in the position i.
SampleInput Outputfor Sample Input
2 8 3 | 2 2 |
Problem source: Iranian Contest
Special Thanks: Shahriar Manzoor, EPS.
注意序列的变化
#include <stdio.h>
#include <string.h>
#include <math.h>
long long int a[100];
int main()
{
long long int i,j,n,m,s,pre,t,sum;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
pre=s=m=0;
for(i=1;;i++)
{
j=i;
sum=0;
while(j!=0)
{
j=j/10;
sum++;
}
m+=sum;
s+=m;
if(s>=n)
{
break;
}
pre=s;
}
n=n-pre;
for(i=1,s=0;;i++)
{
j=i;
sum=0;
while(j!=0)
{
a[sum++]=j%10;
j=j/10;
}
if(s+sum>=n)
{
break;
}
s=s+sum;
}
printf("%lld\n",a[sum-n+s]);
}
return 0;
}