三步走的数位查找题——400. 第 N 位数字

题目


OJ平台

题目详解

跟着这三步走准没错!

  1. which number range(确定在几位数中取)
  2. which number (确定是哪个数)
  3. which bit (确定是这个数的哪一位)

代码详解

看代码+注释应该就懂了

/*
三步走:
1.which number range
2.which number 
3.which bit
*/ 
typedef long long ll;
int findNthDigit(int n){
    
    
    ll i=1;
    ll sum = pow(10,i)-pow(10,i-1);
    while(n-sum*i>=0){
    
    //确定出n在几位数的范围内
        n -= sum*i;
        i++;
        sum = pow(10,i)-pow(10,i-1);
    }
    ll num = n%i==0?n/i:n/i+1;  //确定n在这个i位数中的第几个数
    ll d = n%i;                 //确定对应的数的最终第几位
    sum = pow(10,i-1);          //用于得到i位数的第一个数
    ll number = num + sum -1;   //根据首位数和偏移量num得到具体的number
    char s[20];                 
    sprintf(s,"%ld",number);    //number转字符串方便取位
    int bit;                    
    if(d>0)                     //如果mod出的位数d不为0,则是取第d位,如果为0则取最后一位
    bit = s[d-1]-'0';
    else bit = number%10;
    return bit;
}

猜你喜欢

转载自blog.csdn.net/m0_50945504/article/details/121634756