数字序列中的某一位的数字
题目描述
数字按照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 }