题挺简单的,代码写的很乱,但是这是我很长时间以来一下AC的啊!哎~!
#include<iostream> #include<cstdio> #include<string> using namespace std; int T,a[40000],b[40000]; int fun(int n) { __int64 i,j,k,len=1; i=9; j=1; len=1; k=9; while(n>len) { i--; if(i==0) { k*=10; i=k; j++; } n-=len; len+=j; } return n; } int main() { __int64 i,j,k,n,len=1,sum=0; k=9; j=1; n=9; i=1; for(;i<=32000; i++) { a[i]=j;//记录的是数 b[i]=len;//记录的是长度 n--; j++; if(n==0) { len++; k*=10; n=k; } } for(j=2; j<32000; j++) b[j]+=b[j-1]; b[0]=0; scanf("%d",&T); // for(int l=1; l<=80; l++) while(T--) { // n=l; scanf("%I64d",&n); n=fun(n); for(j=1; j<32000; j++) { if(n>b[j-1] && n<=b[j]) break; } n-=b[j-1]; sum=b[j]-b[j-1]; int m=a[j]; for(k=1; k<=sum-n;k++) m=m/10; printf("%d\n",m%10); } return 0; }