hdu 1597 防忘

来源:互联网 发布:zbrush mac 百度云 编辑:程序博客网 时间:2024/06/04 18:59

find the nth digit

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11979    Accepted Submission(s): 3612


Problem Description
假设:
S1 = 1
S2 = 12
S3 = 123
S4 = 1234
.........
S9 = 123456789
S10 = 1234567891
S11 = 12345678912
............
S18 = 123456789123456789
..................
现在我们把所有的串连接起来
S = 1121231234.......123456789123456789112345678912.........
那么你能告诉我在S串中的第N个数字是多少吗?
 

Input
输入首先是一个数字K,代表有K次询问。
接下来的K行每行有一个整数N(1 <= N < 2^31)。
 

Output
对于每个N,输出S中第N个对应的数字.
 

Sample Input
61234510
 

Sample Output
112124




#include<iostream>#include <cstring>#include <algorithm>#include <stdio.h>#include <cmath>using namespace std;long long d[70001];int main(){    long long s=0;    for(int i=1;i<=70000;i++)  //求出字串的长度    {        s+=i;        d[i]=s;    }    int t;    cin>>t;    while(t--)    {        int n;        cin>>n;        long long l=1,h=70000,mid;        while(l<=h)  //找到哪一组        {            mid=(l+h)/2;            if(d[mid]>n) h=mid-1;            else if(d[mid]<n) l=mid+1;            else            {                l=mid;                break;            }        }        n=n-d[l-1];        n=n%9;        if(n==0) cout<<"9"<<endl;        else cout<<n<<endl;    }}


0 0