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;
    }
};


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务