poj1019——log10求位数
Number Sequence
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 35084 | Accepted: 10099 |
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
283
Sample Output
22 题意:求数串112123123412345..第n位的数字(0-9) 思路:取将每一个123..的位数存起来,利用取对数求位数公式:(int)log10(n*1.0)+1,先二分找出n所在的那个串的位数, n-=其前缀,再找到第n位即可 庆祝一下,程序完全是自己调试出来的,从WA到AC,这次终于没有借助题解了
#include#include #include #include #include #include using namespace std;typedef unsigned long long ull;const int maxn=10001000;const ull INF=21474836470;int T;int n;ull a[maxn],s[maxn];int cnt=1;int tag=1;ull mypow(int n,int k){ ull res=1; while(k--) res*=n; return res;}ull BinSearch(ull *a,int left,int right,int key){ while(left =key&&a[mid-1] =key) right=mid; else left=mid+1; //cout< < INF||s[i]<=0) break; } //for(int i=1;i<50;i++) cout< >T; while(T--){ cin>>n; //cout<<"ans="< <