题目
题目详解
跟着这三步走准没错!
- which number range(确定在几位数中取)
- which number (确定是哪个数)
- 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;
}