কম্পিউটার

একটি সংখ্যার বিকল্প প্যাটার্নে বিট আছে কিনা তা পরীক্ষা করুন - C++ এ Set-2 O(1) অ্যাপ্রোচ


আমাদের একটি পূর্ণসংখ্যা n আছে বিবেচনা করা যাক. সমস্যা হল পরীক্ষা করা, এই পূর্ণসংখ্যার বাইনারি সমতুল্যে বিকল্প প্যাটার্ন আছে কি না। বিকল্প প্যাটার্ন মানে 101010….

পদ্ধতিটি হল:num =n XOR (n>> 1) গণনা করুন, এখন যদি num-এর সমস্ত বিট 1 হয়, তাহলে num-এর বিকল্প প্যাটার্ন আছে।

উদাহরণ

#include <iostream>
#include <algorithm>
using namespace std;
bool isAllBitSet(int n){
   if (((n + 1) & n) == 0)
      return true;
   return false;
}
bool hasAlternatePattern(unsigned int n) {
   unsigned int num = n ^ (n >> 1);
   return isAllBitSet(num);
}
int main() {
   unsigned int number = 42;
   if(hasAlternatePattern(number))
      cout << "Has alternating pattern";
   else
      cout << "Has no alternating pattern";
}

আউটপুট

Has alternating pattern

  1. একটি বড় সংখ্যা 9 দ্বারা বিভাজ্য বা C++ এ নয় তা পরীক্ষা করুন

  2. একটি বড় সংখ্যা 3 দ্বারা বিভাজ্য বা C++ এ নয় তা পরীক্ষা করুন

  3. একটি নম্বর প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য C++ প্রোগ্রাম

  4. সংখ্যা জোড় বা বিজোড় কিনা তা পরীক্ষা করার জন্য C++ প্রোগ্রাম