数字序列中的某一位的数字

题目描述

  数字按照0123456789101112131415161718192021...的顺序排列。第5位(从0开始计数)为5,第13位为1,第19位为4…… 求任意第n位对应的数字

 1 int countOfIntegers(int bit)
 2 {
 3     if(bit==1)return 10;
 4     int factor=1;
 5     int tmp=bit;
 6     while(tmp>1)
 7     {
 8         factor=factor*10;
 9         --tmp;
10     }
11     return 9*factor*bit;
12 }
13 int getBase(int bit)
14 {
15     if(bit==1)return 0;
16     int base=1;
17     while(--bit)
18     {
19         base=base*10;
20     }
21     return base;
22 }
23 int getByIndex(int number, int idx)//得到数字number的第idx位(从右往左)上的数字,比如1253的第2位上的数字为5。
24 {
25     while(--idx)
26     {
27         number=number/10;
28     }
29     return number%10;
30 }
31 int digitAtIndex(int n)//求任意第n为对应的数字
32 {
33     if(n<0)return -1;
34     int bit=1;
35     while(true)
36     {
37         int count=countOfIntegers(bit);
38         if(n>count)
39         {
40             n=n-count;
41             ++bit;
42         }else break;
43     }
44     int num=n/bit;
45     int idx=n%bit;
46     int base=getBase(bit);//得到最开始的bit位的数字,比如最开始的1位数是0,最开始的2位数是10,最开始的3位数是100...
47     return getByIndex(base+num, bit-idx);
48 }

 

posted @ 2017-12-28 13:45  jeysin  阅读(371)  评论(0编辑  收藏  举报