POJ 1019 Number Sequence(数学技巧轻松解决)

该博客介绍了如何利用数学技巧解决POJ 1019问题,该问题要求找出序列中第i位的数字。通过设立数组s和p,计算每个数字串sk的长度,并确定第i位数字所在的位置。通过预先计算和循环查找,可以高效地求解题目所给的任意位置的数字。
摘要由CSDN通过智能技术生成

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之间,然后把这个数找出来就不难了,详细实现看代

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值