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

C++-এ সংখ্যা এনকোড করা


একটি ঋণাত্মক নয় এমন পূর্ণসংখ্যা n দেওয়া আছে। এর এনকোড করা রূপ বের করতে হবে। এনকোডিং কৌশল নিচের টেবিল অনুযায়ী:

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

সুতরাং, সংখ্যা ২৩ হলে ফলাফল হবে 1000, আর ৫৪ হলে 10111।

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

  • bin নামের একটি মেথড বানান যা n আর k নেবে। এটি নিচের মতো কাজ করবে:
    • res := খালি স্ট্রিং
    • n > 0 रहने পর্যন্ত:
      • res := res + (n mod 2) এর অঙ্ক
      • n := n / 2
    • res উল্টান।
    • x > res.length() रहने পর্যন্ত res-এর শুরুতে ০ যোগ করুন।
    • res ফেরত দিন।
  • মূল মেথড:
    • যদি n = 0 হয়, খালি স্ট্রিং ফেরত দিন; n = 1 হলে "0"; n = 2 হলে "1"।
    • x := log2(n)
    • যদি 2^(x+1) - 1 = n হয়:
      • ans := খালি স্ট্রিং
      • x ১ বাড়ান।
      • x != 0 रहने পর্যন্ত ans-এর শেষে ০ যোগ করুন, x ১ বাড়ান।
      • ans ফেরত দিন।
    • bin(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. Frugal সংখ্যা চেক করা (C++)

  2. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  3. সি++-এ নাম্বার অফ এনক্লেভস (Number of Enclaves)

  4. C++-এ অ্যাডাম সংখ্যা (Adam Number) চেক করার পদ্ধতি