#include<iostream>
#include<math.h>
#define SIZE 50000
using namespace std;
int main(void){
int T;//test case
cin>>T;
if(T>10 || T<1)
return 0;
long a[SIZE];
a[0] = 0;
//long k = 0;
long k[SIZE];
k[0] = 0;
for(int i=1;i<SIZE;i++){
//k = k + log(i)/log(10) + 1;
k[i] = k[i-1] + int(log(i)/log(10)) + 1;
a[i] = a[i-1]+ k[i-1];
cout<<k[i]<<endl;
//cout<<a[i]<<endl;
}
for(int t=0;t<T;t++){
int n;
cin>>n;
int m=1;
while(a[m] < n){
m++;
}
//temp 表示在k[m]中的第temp位
long temp = n - a[m-1];
int q =1;
while(temp - (int(log(q)/log(10)) + 1) >= 0){
temp = temp - (int(log(q)/log(10)) + 1);
q++;
}
int ans = 0;
ans = (q-1)% int(pow(10,(temp+1)))/int(pow(10,(temp)));
cout<<ans<<endl;
/**
int p=1;
while( k[p] < temp){
p++;
}
int tmp = temp - k[p-1];
cout<<temp<<" "<<tmp<<endl;
int ans = p% int(pow(10,(tmp+1)))/10;
cout<<ans<<endl;**/
}
system("pause");
return 0;
#include<math.h>
#define SIZE 50000
using namespace std;
int main(void){
int T;//test case
cin>>T;
if(T>10 || T<1)
return 0;
long a[SIZE];
a[0] = 0;
//long k = 0;
long k[SIZE];
k[0] = 0;
for(int i=1;i<SIZE;i++){
//k = k + log(i)/log(10) + 1;
k[i] = k[i-1] + int(log(i)/log(10)) + 1;
a[i] = a[i-1]+ k[i-1];
cout<<k[i]<<endl;
//cout<<a[i]<<endl;
}
for(int t=0;t<T;t++){
int n;
cin>>n;
int m=1;
while(a[m] < n){
m++;
}
//temp 表示在k[m]中的第temp位
long temp = n - a[m-1];
int q =1;
while(temp - (int(log(q)/log(10)) + 1) >= 0){
temp = temp - (int(log(q)/log(10)) + 1);
q++;
}
int ans = 0;
ans = (q-1)% int(pow(10,(temp+1)))/int(pow(10,(temp)));
cout<<ans<<endl;
/**
int p=1;
while( k[p] < temp){
p++;
}
int tmp = temp - k[p-1];
cout<<temp<<" "<<tmp<<endl;
int ans = p% int(pow(10,(tmp+1)))/10;
cout<<ans<<endl;**/
}
system("pause");
return 0;
}
以上可能会出现compile error
#include<iostream>
#define SIZE 50000
using namespace std;
int mypow(int x){
int ans = 1;
while(x>0){
ans *= 10;
x--;
}
return ans;
}
int mylog(int a){
int ans = 0;
while(a > 0){
a /= 10;
ans ++;
}
return ans-1;
}
int main(void){
long a[SIZE];
a[0] = 0;
for(int i=1;i<SIZE;i++){
a[i] = a[i-1] + 1 + mylog(i);
// cout<<a[i]<<endl;
}
int test;
cin>>test;
if(test <1 || test>10)
return 0;
for(int t=0;t<test;t++){
long n;
cin>>n;
int k=1;
while(n > a[k]){
n -= a[k] ;
k++;
}
int m = n;//最后剩下的m个数字
int p=1;
while(m > a[p]) {
p ++;
}
m -= a[p-1];
//cout<<m<<" "<<p<<endl;
int ans = 0;
//mylog(p)表示数值p的总位数
//(mylog(p) + 1 -m )清除后面的 然后模取后面的
ans = p/ mypow((mylog(p) + 1 -m )) %10;
cout<<ans<<endl;
}
// system("pause");
return 0;
}