Number Sequence
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
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
题意: 一串数字有s1,s2,s3,s4…sk,sk由1234567……k-1 k 组成,例如前80个数字为11212312341234512345612345671234567812345678912345678910123456789101112345678910,现在要你写一个程序,判断第i位数字是什么。第一行为测试样例的个数n,接下来n行的数字a,你要求出第a位是什么数字。
解题思路 :设数组s[max]表示s1-sk的总长度,p[max]表示sk(k=1,2,3,4,5…,n)的长度,根据求数字n位数的公式log10(n) + 1,对这个公式感兴趣可参考Defepe的博客-HDU 1018 Big Number。 p[i] = p[i - 1] + (int)log10(i) + 1;p[1] = 1;i代表任意一个数,p[i] 表示从1-i所有数的位数和,即为si的总位数,那么s1-si(si是一个数字串,s[i]是数组,注意区分)的位数和位s[i] = s[i - 1] + p[i]。因为s1-si-1和s1-si差了si,而si的位数和为p[i],所以推得上述等式。预先设置s[1]] = 1, p[1] = 1。这样就可以全都推出来啦。因为题目范围是1-2147483647,而计算到s[31269]>2147483647,所以计算到31269就可以停止了。然后我们用它让我们求的第n位数,先用循环找到第一位s[i]>=n为止,这个要求的数字必然在s1-si之间,然后把这个数找出来就不难了,详细实现看代