POJ 1019 Number Sequence【数论】
来源:互联网 发布:单片机秒表课程设计 编辑:程序博客网 时间:2024/05/17 09:33
转自 http://www.cnblogs.com/Hilda/archive/2012/08/17/2644739.html
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
283
Sample Output
22题目大意:比较容易理解就是找出第i位的数字是多少;思路:
很容易看出题目给的规律,1 112 112123 1121231234 112123123412345....题目给出第i位的数字,i的范围恰好是int的范围,可以算出不会超过40000组;
用a[i]表示i组数的位数:a[i]=a[i-1]+(int)(log10(i*1.0))+1; num[i]表示前i组数的位数和num[i]=num[i-1]+a[[i];
举例:假若求54321的第2位的数字,即54321/(pow(10, 5-2))%10;即将多余的位数去掉:n/(pow(10, 多余位数),在对10取模得打结果;
关于精度问题解题思路没有精确说明;
代码如下:
#include<stdio.h>#include<string.h>#include<math.h> long long a[40005], num[40005]; int main(){ int T, i; long long n; scanf("%d", &T); memset(a, 0, sizeof(a)); memset(num, 0, sizeof(num)); for(i=1; i<=40000; i++) { a[i]=(long long)(log10(i*1.0))+1+a[i-1]; num[i]=num[i-1]+a[i]; } while(T--) { scanf("%lld", &n); for(i=0; i<40000; i++) if(n>num[i]&&n<=num[i+1]) break; int pos=n-num[i]; int length=0; for(i=1; length<pos; i++) length+=(int)(log10(i*1.0))+1; int mod=(i-1)/((int)(pow(10.0, length-pos)))%10; printf("%d\n", mod); }}
阅读全文
0 0
- POJ 1019 Number Sequence【数论】
- 1019 Number Sequence 数论
- POJ 1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- poj 1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- POJ-1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- poj 1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- POJ 1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- POJ 1019 Number Sequence
- ubuntu17.04以及17.10安装java7,jdk7,jre7
- 数组中寻找插入位置算法
- Array 和List对比之Partition
- 列表生成式相关技巧,相关问题
- Oracle介绍
- POJ 1019 Number Sequence【数论】
- mongodb批量更新某个字段
- CentOS7使用firewalld打开关闭防火墙与端口
- React学习(三):性能调优
- 多线程:C# 多线程控制 通讯 和切换
- ChartControl横向条形图
- LintCode 分割字符串
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
- Visual Studio 2015配置OpenCV3.2