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

C++-এ বাইনারি রিপ্রেজেন্টেশন থেকে নেক্সট নম্বর বের করা


এই সমস্যাতে, আমাদের একটি নম্বরের বাইনারি রিপ্রেজেন্টেশন দেওয়া আছে এবং আমাদের নেক্সট নম্বর অর্থাৎ দেয়া নম্বর সাথে ১ যোগ করলে যা আসে তার বাইনারি রিপ্রেজেন্টেশন বের করতে হবে।

বাইনারি রিপ্রেজেন্টেশন হলো একটি নম্বরের বেস ২-এ কনভার্ট করে শুধু ০ বা ১ দিয়ে রিপ্রেজেন্ট করা।

উদাহরণস্বরূপ, ১৪-এর বাইনারি রিপ্রেজেন্টেশন 1110।

তবে, আমাদের একটি নম্বর n বাইনারি ফর্মে দেওয়া থাকবে। এবং আমাদের n+1-এর বাইনারি রিপ্রেজেন্টেশন বের করতে হবে।

এই সমস্যা সমাধান করতে হলে বাইনারি অ্যাডিশনের বেসিক জানতে হবে। ০ বা ১ সাথে ১ যোগ করলে বাইনারি-তে কী হয় তা দেখি:

0 + 1 = 1

1 + 1 = 10

উদাহরণ

উদাহরণ দিয়ে দেখি কিভাবে সমাধান করব:

ইনপুট: 010010111 
আউটপুট: 010011000 
ব্যাখ্যা: (010010111)₂ হলো ১৫২-এর বাইনারি রিপ্রেজেন্টেশন এবং নেক্সট নম্বর হবে ১৫৩ যার বাইনারি রিপ্রেজেন্টেশন (010011000)₂। আমরা বাইনারি অ্যাডিশন ব্যবহার করব এবং বাইনারি (1)₂ নম্বরের বাইনারি রিপ্রেজেন্টেশনে যোগ করব।

উপরের উদাহরণ থেকে দেখা যাচ্ছে যে বাইনারি ১ যোগ করলে ডান দিক থেকে সব ১ গুলো ০ হয়ে যায়, যতক্ষণ না প্রথম ০ পাওয়া যায় এবং সেই ০ কে ১ করে ফ্লিপ করা হয়। এখন এই লজিকের জন্য অ্যালগরিদম বানাই।

অ্যালগরিদম

ধাপ ১: ডান থেকে বাম শুরু করুন অর্থাৎ n-1 থেকে 0 
ধাপ ২: ০ পাওয়া গেলে সেটি ১ করুন এবং ব্রেক করুন 
ধাপ ৩: ১ পাওয়া গেলে সেটি ০ করুন 
ধাপ ৪: কোনো ০ না পাওয়া গেলে, অ্যারের শুরুতে ১ যোগ করুন 
ধাপ ৫: অ্যারে প্রিন্ট করুন

উদাহরণ

এখন, এই অ্যালগরিদমের কোড বাস্তবায়ন দেখি।

#include <bits/stdc++.h> 
using namespace std; 

string nextBinary(string num) { 
    int l = num.size(); 
    int flag = 0; 
    for (int i = l - 1; i >= 0; i--) { 
        if (num.at(i) == '0') { 
            num.at(i) = '1'; 
            flag = 1; 
            break; 
        } else 
            num.at(i) = '0'; 
    } 
    if (flag < 0) 
        num = "1" + num; 
    return num; 
} 

int main() { 
    string number = "0111010111"; 
    cout << "The Binary representation of the number is " << number << endl; 
    cout << "Binary representation of next number is " << nextBinary(number); 
    return 0; 
}

আউটপুট

The Binary representation of the number is 0111010111 
Binary representation of next number is 0111011000

  1. Frugal সংখ্যা চেক করা (C++)

  2. C++ একটি সংখ্যাকে অন্য সংখ্যার ঘাতে প্রকাশ করা

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

  4. C++-এ বাইনারি সার্চ ট্রি ইটারেটর (Binary Search Tree Iterator)