先求处在哪一段,再求是这一段中的哪一个数,最后求是这个数的第几位。 #include <iostream> using namespace std; int length(unsigned int k)//求k在10进制下有多少位 { int len=0; while(k) { k=k/10; len++; } return len; } int main() { unsigned int n,t; scanf("%u",&n); while(n--) { scanf("%ud",&t); int k=0,last=0; while(t>last)//求处在哪一段 { t=t-last; k++; last=last+length(k); } k=0;last=0; while(t>last)//求处在这一段的哪个数 { k++; last=last+length(k); } t=t-last+length(k); int len=length(k);//提取出数k的第t个数 for(int i=0;i<len-t;i++) { k=k/10; } printf("%d/n",k%10); } }