poj 1019

时间:2021-08-07 08:57:18

懂了

题意是给一串 1 12 123 1234 12345 123456 。。。。这样的数字问第

i个数字是多少

Sample Input

2
8
3

Sample Output

2
2
 #include<math.h>
#include<cstdio>
#include<iostream>
using namespace std;
unsigned int a[],s[]; //a是到第i个数字的位数,s是第i组的位数
void reset()//打表
{
int i;
a[]=;
s[]=;
for(i=;i<;i++)
{
a[i]=a[i-]+(int)log10((double)i)+;
s[i]=s[i-]+a[i];
}
/*for(i=1;i<=100;i++)
{
printf("%d ",a[i]);
}
printf("\n");
for(i=1;i<=100;i++)
{
printf("%d ",s[i]);
}*/
} int main()
{
int T;
int n;
int i;
scanf("%d",&T);
reset();
while(T--)
{
scanf("%d",&n);
i=; while(s[i]<n) i++; /* 找到 n 所在的组 */ int pos=n-s[i-]; /* n 在该组的下标 */
int tmp=;
for(i=;tmp<pos;i++) /* length: n指向的数字的最后一位的下标 */
{
tmp+=(int)log10((double)i)+;
}
printf("%d %d\n",pos,tmp);
int k=tmp-pos;
printf("%d\n",(i-)/(int)pow(10.0,k)%) ;/*从右向左求,比如123456,k=2,则结果为4*/ /* 去掉所求位后面的数字然后取余 */
/* i: n指向的数字 + 1 */ }
return ; }