400. 第N个数字 - 力扣(LeetCode)
找规律的题目: 1位数9个 2位数90个 3位数900个 … 所以根据n的大小可以先定位到n指向的数字是几位数
class Solution { public: int findNthDigit(int n) { //digit表示位数 long base = 9, digit = 1; while(n > base*digit){ n -= base*digit; base *= 10; ++digit; } //n对应的数字是digit位数 //n现在表示digits位数的第n个数字 int num = pow(10, digit-1);//最小的digit位数 int x = n / digit, y = n % digit; if(y) num += x;//digit位数是从000...开始的 else num += x-1;//y == 0,n指向的数字是第x个数的末尾位 //cout << num << endl; if(y == 0) y = digit; return to_string(num)[y-1] - '0';//字符串下标从0开始 } };