poj 1019 Number Sequence
http://poj.org/problem?id=1019
题意:1 12 123 1234 12345 一窜数字 求第n位的数字是什么
分析:拿到题就是不会。。。
看了题解
a[i]计算i数字的位数,s[i]计算到达i数字的总位数
i数字的位数log10(i)+1
#include<stdio.h> #include<math.h> const int MAXN=40000; long long a[MAXN]; long long s[MAXN]; void init() { s[1]=a[1]=1; for(int i=2;i<MAXN;i++) { a[i]=a[i-1]+(int)log10((double)i)+1; s[i]=s[i-1]+a[i]; } } int compute(int n) { int pos,i=1; while(s[i]<n) i++;//找出第i个数字的位数和是大于n的 pos=n-s[i-1];//计算出n位是第i个数字的第几位 int len=0; for(i=1;len<pos;i++)//找出那个数字i len+=(int)log10((double)i)+1; return (i-1)/(int)pow(10.0,len-pos)%10;//i-1是上一个循环i多加了一次,len-pos是‘ //所求位数字的后面那几位要除掉,在%10就是所求位的数字了 } //例如5 s[3]=112123,pos=5-s[2]=2;循环中所能找到的len=3,i=3; 2/1%10=2; int main() { int T,n; init(); scanf("%d",&T); while(T--) { scanf("%d",&n); printf("%d\n",compute(n)); } return 0; }