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

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


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

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

উদাহরণস্বরূপ, ২৩-এর বাইনারি রিপ্রেজেন্টেশন 10111।

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

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

উদাহরণ দিয়ে ভালোভাবে বুঝি:

ইনপুট: 101101100 
আউটপুট: 101101011 
ব্যাখ্যা: (101101100)₂ হলো ৩৬৪-এর বাইনারি রিপ্রেজেন্টেশন। এর প্রিভিয়াস নম্বর ৩৬৩ যার বাইনারি রিপ্রেজেন্টেশন (101101011)₂। আমরা বাইনারি সাবট্র্যাকশন ব্যবহার করেছি এবং নম্বরের বাইনারি রিপ্রেজেন্টেশন থেকে (1)₂ বিয়োগ করেছি।

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

অ্যালগরিদম

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

উদাহরণ

উপরের অ্যালগরিদমের প্রোগ্রাম বাস্তবায়ন:

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

string previousNumber(string num) { 
    int n = num.size(); 
    if (num.compare("1") == 0) 
        return "0"; 
    int i; 
    for (i = n - 1; i >= 0; i--) { 
        if (num.at(i) == '1') { 
            num.at(i) = '0'; 
            break; 
        } else 
            num.at(i) = '1'; 
    } 
    if (i == 0) 
        return num.substr(1, n - 1); 
    return num; 
} 

int main() { 
    string number = "1011011000"; 
    cout << "the Binary representation of the number is " << number << endl; 
    cout << "Binary representation of previous number is " << previousNumber(number); 
    return 0; 
}

আউটপুট

The Binary representation of the number is 1011011000 
Binary representation of previous number is 1011010111

  1. বাইনারি রিপ্রেজেন্টেশনে k-তম বিটের মান বের করা (C++)

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

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

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