http://acm.pku.edu.cn/JudgeOnline/problem?id=1019
Код:
#include <stdio.h> typedef __int64 longint; int main(){ longint task; longint n; longint i,j,k,l; longint st[10]; scanf("%I64d",&task); while (task--) { scanf("%I64d",&n); i = 0; j = 0; l = 0; while (l < n) { i++; if ( i < 10) k = 1; else if (i < 100) k = 2; else if (i < 1000) k = 3; else if (i < 10000) k = 4; else if (i < 100000) k = 5; else if (i < 1000000) k = 6; j += k; l += j; } l -= j; n -= l; i = 0; j = 0; while (j < n) { i++; if ( i < 10) k = 1; else if (i < 100) k = 2; else if (i < 1000) k = 3; else if (i < 10000) k = 4; else if (i < 100000) k = 5; else if (i < 1000000) k = 6; j += k; } j -= k; n -= j; k = 0; while (i) { st[k++] = i % 10; i /= 10; } printf("%I64d\n",st[k-n]); } return 0; }