C ++中的第N位

假设我们有一个无限整数序列,我们必须找到该序列的第n个数字。因此,如果输入为11,则输出将为0,就像我们将数字放置为123456789101112一样,因此第11位为0。

为了解决这个问题,我们将遵循以下步骤-

  • len:= 0和cnt:= 9并开始:= 1

  • 而n> len * cnt

    • n:= n –(len * cnt)

    • cnt:= cnt * 10,开始:=开始* 10

    • len增加1

  • 开始:=开始+(n-1)/ len

  • s:=以字符串开头

  • 返回s [(n – 1)mod len]

范例(C ++)

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int findNthDigit(int n) {
      lli len = 1;
      lli cnt = 9;
      lli start = 1;
      while(n > len * cnt){
         n -= len * cnt;
         cnt *= 10;
         start *= 10;
         len++;
      }
      start += (n - 1) / len;
      string s = to_string(start);
      return s[(n - 1) % len] - '0';
   }
};
main(){
   Solution ob;
   cout << (ob.findNthDigit(11));
}

输入值

11

输出结果

0