C++实现
数字序列中某一位的数字
http://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5
先观察数字规律
小于10,1~9,9个数字,9位
小于100,10~99,90个数字,180位
小于1000,100~999,900个数字,2700位
各个区间的下限上限是[0,10),[10, 100),[100,1000)...位数是1,2,3...
从第1个区间的上限开始进行比较,如果大于上限,将上下限*10,将n=n-(上限-下限)*位数 直至找到n所在的区间
找到区间后,n/位数 找到所在的数字,然后n%位数,找到数字的第几位数字
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int findNthDigit(long n) { // write code here int count=1; long bottom=0, top=10; while(n>(top-bottom)*count){ n -= (top-bottom)*count; count++; bottom = top; top *= 10; } long r = n%count; //余数 long num = (n-r)/count; //除数 num += bottom; //数值 long ret = num%10; while(num/10){ num /= 10; cout << num << endl; ret = num%10; if(r==count) break; r++; } return ret; } };