কম্পিউটার

C++ এ এনকোড নম্বর


ধরুন আমাদের একটি নন-নেতিবাচক পূর্ণসংখ্যা n আছে, এবং আমাদের এটির এনকোড করা ফর্মটি খুঁজে বের করতে হবে। এনকোডিং কৌশলটি নিম্নরূপ হবে -

সংখ্যা এনকোড করা নম্বর
0 ""
1 “0”
2 “1”
3 "00"
4 "01"
5 ”10”
6 "11"
7 "000"

সুতরাং সংখ্যাটি যদি 23 হয়, তাহলে ফলাফল হবে 1000, যদি সংখ্যাটি 54 হয়, তাহলে তা হবে 10111

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • বিন নামে একটি পদ্ধতি তৈরি করুন, এটি n এবং k লাগবে, এই পদ্ধতিটি নীচের মত কাজ করবে
  • res :=খালি স্ট্রিং
  • যখন n> 0
    • res :=res + n mod 2 এর অঙ্ক
    • n :=n /2
  • সংখ্যা রিভার্স করুন
  • যখন x> রেজের দৈর্ঘ্য
    • res :=res-এর সাথে 0-এর আগে লিখুন
  • রিটার্ন রিটার্ন
  • প্রকৃত পদ্ধতিটি নিম্নরূপ হবে -
  • যদি n =0 হয়, তাহলে খালি স্ট্রিং ফেরত দিন, যদি n 1 হয়, "0" ফেরত দিন, অথবা n 2 হলে, "1" ফেরত দিন
  • x :=লগ n বেস 2
  • যদি 2 ^ (x + 1) – 1 =n, তাহলে
    • উত্তর :=খালি স্ট্রিং
    • x 1 দ্বারা বাড়ান
    • যদি x 0 না হয়, তারপর ans :=ans এর সাথে 0 যোগ করুন এবং x কে 1 দ্বারা বাড়ান
    • উত্তর ফেরত দিন
  • রিটার্ন বিন (n – 2^x + 1, x)

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string bin(int n, int x){
      string result = "";
      while(n>0){
         result += (n%2) + '0';
         n/=2;
      }
      reverse(result.begin(), result.end());
      while(x>result.size())result = '0' + result;
      return result;
   }
   string encode(int n) {
      if(n == 0)return "";
      if(n == 1)return "0";
      if(n==2) return "1";
      int x = log2(n);
      if(((1<<(x+1)) - 1) == n){
         string ans = "";
         x++;
         while(x--)ans+="0";
         return ans;
      }
      return bin(n - (1<<x) + 1, x);
   }
};
main(){
   Solution ob;
   cout << (ob.encode(23)) << endl;
   cout << (ob.encode(56)) << endl;
}

ইনপুট

23
54

আউটপুট

1000
11001

  1. C++ এ মিতব্যয়ী নম্বর

  2. C++ পেন্টাটোপ নম্বর

  3. C++ এ ছিটমহলের সংখ্যা

  4. C++ এ অ্যাডাম নম্বর