Digit

题目描述

我们把十进制整数依次写成一个字符串,123456789101112…请问第n位数码是多少?

输入

第一行是一个整数T(T≤10000),表示样例的个数。 每行输入一个整数n(1≤n≤788888899)。

输出

每行输出一个样例的结果。

样例输入

2
1
788888899

样例输出
1
1
#include<stdio.h>
#include<math.h>
int main()
{
    int i, j, T, b, c, y, x, t;
    long long ac[20]={0}, a, n;
    for(i = 1; i <= 9; i++)
    {
       a = 9;
       for(j = 1; j < i; j++)
            a = a * 10;
       ac[i] = i * a;
    }
    scanf("%d", &T);
    while(T--)
    {
        scanf("%I64d", &n);
        if(n < 10)
        {
            printf("%I64d\n", n);
            continue;
        }
        for(i = 1; i <= 9; i++)
        {
            n -= ac[i];
            if(n <= 0)
            {
                n += ac[i];
                b = i;
                break;
            }
        }
        t = 1;
        for (i = 1; i < b; i++)
            t *= 10;
        x = n / b;
        if (x != 0)
           x--;
        y = n % b;
        x += t;
        if (y == 0)
            printf("%d\n", x % 10);
        else
        {
            x++;
            c = 1;
            for (i = 1; i <= b-y; i++)
                c *= 10;
            printf("%d\n", (x/c)%10);
        }
    }
   return 0;
}

 

posted @ 2015-04-26 16:01  搁浅の记忆  阅读(346)  评论(0编辑  收藏  举报