একটি ঋণাত্মক নয় এমন পূর্ণসংখ্যা 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