কম্পিউটার টিউটোরিয়াল

C++-এ Nth ডিজিট খুঁজে বের করা


ধরুন আমাদের একটি অসীম ইন্টিজার সিকোয়েন্স আছে, আমাদের এই সিকোয়েন্সের nth ডিজিট বের করতে হবে। ইনপুট ১১ হলে আউটপুট হবে ০, কারণ সংখ্যাগুলো ১২৩৪৫৬৭৮৯১০১১১২... এভাবে রাখলে ১১তম ডিজিট ০।

সমাধানের ধাপগুলো:

  • len := 0, cnt := 9, start := 1

  • যখন n > len * cnt

    • n := n – (len * cnt)

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

    • len ১ বাড়ান

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

  • s := start স্ট্রিং হিসেবে

  • রিটার্ন 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
  1. C++-এ ১ থেকে n পর্যন্ত ডিজিট ১-এর সংখ্যা গণনা (Number of Digit One)

  2. C++-এ a বা b দ্বারা বিভাজ্য Nth পদ বের করার প্রোগ্রাম

  3. C++ STL-এ iswdigit() ফাংশন

  4. দেওয়া তালিকা থেকে n-তম সংখ্যা যেটি অঙ্ক k ধারণ করে অথবা k দিয়ে বিভাজ্য C++-তে