Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
Note:
n is positive and will fit within the range of a 32-bit signed integer (n < 231).
Example 1:
Input: 3 Output: 3
Example 2:
Input: 11 Output: 0 Explanation: The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.
这道题目我之前见过。。。。一开始用下边注释的代码写,也通过了不过有点费时。后来改成取模。
class Solution { public: int findNthDigit(int n) { // 2: 90 3:900 4: 9000 5:90000 6: 900000 7:9000000 8:90000000 9:900000000 10:9000000000 long x = 1; long t = 9; if (n < 10) return n; while (n > x * t) { n -= x * t; x++; t *= 10; } long sum = 0; int m = n % x; if (m == 0) return ((long)pow(10.0,x-1) + n/x - 1)%10; else { long q = (pow(10.0, x-1) + (n/x) ); for (int j = 0; j < x - m; ++j) q/=10; return q%10; } /* for (int i = 0; i < t; ++i) { sum += x; if (sum == n) { return (i % 10); } else if (sum > n) { long y = sum - n; long z = pow(10.0,(x - 1)) + i; cout <<z; for (int j = 0; j < y; ++j) { z /= 10; } return z%10; } } */ } };