Computer >> Máy Tính >  >> Lập trình >> C ++

Chữ số thứ N trong C ++


Giả sử chúng ta có một dãy số nguyên vô hạn, chúng ta phải tìm chữ số thứ n của dãy số này. Vì vậy, nếu đầu vào là 11, thì đầu ra sẽ là 0 giống như khi chúng ta đặt các số như 123456789101112, vậy chữ số 11 là 0.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • len:=0 và cnt:=9 và start:=1

  • while n> len * cnt

    • n:=n - (len * cnt)

    • cnt:=cnt * 10, start:=start * 10

    • tăng len lên 1

  • start:=start + (n - 1) / len

  • s:=bắt đầu dưới dạng chuỗi

  • return s [(n - 1) mod len]

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

11

Đầu ra

0