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

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

এই সমস্যায়, আমাদের একটি আনসাইনড ইন্টিজার n দেওয়া আছে। আমাদের কাজ হল একটি প্রোগ্রাম তৈরি করা যা নাম্বারের সব বিট রিভার্স করে যে নাম্বার জেনারেট হবে সেটি রিটার্ন করবে।

একটি উদাহরণ দিয়ে সমস্যাটি বুঝতে পারি,

ইনপুট

n = 1

আউটপুট

2147483648

ব্যাখ্যা

binary of 1 is 000...0001, the reverse is 100...0000.

এই সমস্যাটি সমাধান করতে একটি সিম্পল সমাধান হবে একটি সিম্পল ফর্মুলা ব্যবহার করা। আমরা নাম্বারের বাইনরি থ্রু লুপ করব। এবং নাম্বারে সেট বিটের পজিশন বের করব, মনে করি সেটি i। রেজাল্ট ক্যালকুলেট হবে ফর্মুলা দিয়ে, ((total_number_of_bits) - 1) - i

উদাহরণ

এই অ্যালগরিদমের ইমপ্লিমেন্টেশন দেখানোর প্রোগ্রাম,

#include <iostream>
using namespace std;

unsigned int reverseBitNumber(unsigned int num) {
    unsigned int totalNumberOfBits = sizeof(num) * 8;
    unsigned int reverseNumber = 0, temp;
    for (int i = 0; i < totalNumberOfBits; i++) {
        if ((num & (1 << i)))
            reverseNumber |= (1 << ((totalNumberOfBits - 1) - i));
    }
    return reverseNumber;
}

int main() {
    unsigned int n = 21;
    cout << "The number is " << n << endl;
    cout << "The number which has reverse bits of the number is: " << reverseBitNumber(n);
    return 0;
}

আউটপুট

The number is 21
The number which has reverse bits of the number is: 2818572288

মেথড ২

আর একটি মেথড হল শিফ্টিং ব্যবহার করা, আমরা নাম্বারের বিটগুলো শিফ্ট করব যতক্ষণ না সেটি শূন্য হয় এবং সেগুলো রিভার্স নাম্বারে শিফ্ট করব এবং তারপর বাকি সংখ্যক বার শিফ্ট করব রেজাল্ট পেতে।

আমাদের সমাধানের ইমপ্লিমেন্টেশন দেখানোর প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;

unsigned int reverseBitNumber(unsigned int n) {
    unsigned int rem_shift = sizeof(n) * 8 - 1;
    unsigned int reverseNubmer = n;
    n >>= 1;
    while (n) {
        reverseNubmer <<= 1;
        reverseNubmer |= n & 1;
        n >>= 1;
        rem_shift--;
    }
    reverseNubmer <<= rem_shift;
    return reverseNubmer;
}

int main() {
    unsigned int n = 21;
    cout << "The number is " << n << endl;
    cout << "The number which has reverse bits of the number is: " << reverseBitNumber(n);
    return 0;
}

আউটপুট

The number is 21
The number which has reverse bits of the number is: 2818572288
  1. অ্যারে রিভার্স করার C প্রোগ্রাম

  2. সি++-তে বিট রিভার্স

  3. পাইথনে ধনাত্মক পূর্ণসংখ্যার বিট উল্টিয়ে ফেলার প্রোগ্রাম

  4. পাইথনে একটি সংখ্যার টোটাল বিট গণনা করার প্রোগ্রাম