最新消息:点击查看大S的省钱秘笈

POJ 1019 Number Sequence C++版

POJ题解 Slyar 106浏览 0评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

数学题,不难,倒是看解题报告学到了一个公式。

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

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

Slyar:给出一串那样的数字,很有规律的,总共有2147483647位,然后问你第 n 位上的数字是多少。一开始我理解错题意了,以为是问第 n 位的数是多少,WA了2次之后才发觉超过10以后的数字都不止1位了...悲剧

一开始做的复杂了,看了下解题报告才发现数字的位数可以用 log10((double)i) + 1 这个公式求出来,这样逐步求精就可以慢慢地求出结果了,具体方法我注释里写得很清楚。

直接一个一个求组,最后要16MS,如果之前把分组打表保存,就可以0MS过了。还有一个需要注意的就是边界,用int的话会溢出。

转载请注明:Slyar Home » POJ 1019 Number Sequence C++版

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (4)

  1. @summer 用来打表,长度是打表以后算出来的...
    Slyar6年前 (2011-04-21)回复
  2. 请问你这两个数组是用来做什么的 还有数组的长度为什么这么定义?
    summer6年前 (2011-04-21)回复
  3. 方法果然淫荡
    匿名6年前 (2010-10-07)回复