BIT寒假练习-2013__1009:Number Sequence

来源:互联网 发布:淘宝客qq群推广助手 编辑:程序博客网 时间:2024/06/11 23:58

题目大意:

数列按照S1S2S3...的顺序排列,其中,Si=123...i,比如11212312341234512345612345671234567812345678912345678910123456789101112345678910,要求算出第N个数字是什么,比如,第80个是0。

数列的增长速度是可以模拟的,先找出要求的数字在第几个数列里面,然后再在数列里面找到要找的数字。

模拟题,写着复杂,解释的也复杂。(-。-)

#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#include <cmath>using namespace std;int a[200][200];int n,m,boo,num,k,zen,now,pas;int main(){scanf("%d",&n);while (n--){      scanf("%d",&m);      zen = 1;      num = 0;      now = 0;      for (int i = 1 ;; i ++)      {          now += zen;          num += now;          if (i==9||i==99||i==999||i==9999||i==99999||i==999999||i==9999999||i==99999999) zen++;          if (num >= m) {                         num -= now;                         boo = i;                         break;                        }      }      k = m - num;      zen = 1;      for (int i = 1 ; i <= boo ; i ++)      {          k -= zen;          if (k <= 0) {                      k += zen;                      pas = log10((double)i);                      for (int j = k ; j <= pas ; j ++)                          i /= 10;                      printf("%d\n",i%10);                      break;                     }          if (i==9||i==99||i==999||i==9999||i==99999||i==999999||i==9999999||i==99999999) zen++;      }}return 0;}