কম্পিউটার

আগের ছোট পূর্ণসংখ্যার C++ এ এক কম সংখ্যক সেট বিট রয়েছে


এই সমস্যায়, আমরা একটি পূর্ণসংখ্যা n দেওয়া হয়. আমাদের কাজ হল সংখ্যার বাইনারি উপস্থাপনার এক সেট বিট পরিবর্তন করে n-এর চেয়ে কম বড় সংখ্যাটি প্রিন্ট করা।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক

Input: n = 3
Output: 2
Explanation: (3)10 = (011)2
Flipping one set bit gives 001 and 010. 010 is greater i.e. 2.

এই সমস্যাটি সমাধান করার জন্য, আমাদের ডানদিকের সেট বিটটি ফ্লিপ করতে হবে এবং এটিকে শূন্য করতে হবে যা সংখ্যাটির এক বিট ফ্লিপ করার মাধ্যমে পাওয়া n এর থেকে সবচেয়ে বড় সম্ভাব্য সংখ্যা তৈরি করবে।

আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,

উদাহরণ

#include<iostream>
#include<math.h>
using namespace std;
int returnRightSetBit(int n) {
   return log2(n & -n) + 1;
}
void previousSmallerInteger(int n) {
   int rightBit = returnRightSetBit(n);
   cout<<(n&~(1<<(rightBit - 1)));
}
int main() {
   int n = 3452;
   cout<<"The number is "<<n<<"\nThe greatest integer smaller than the number is : ";
   previousSmallerInteger(n);
   return 0;
}

আউটপুট

The number is 3452
The greatest integer smaller than the number is : 3448

  1. একটি সংখ্যার C++ এ একই সংখ্যক সেট এবং আনসেট বিট আছে কিনা তা পরীক্ষা করুন

  2. C++ এ একজনের পূর্ণসংখ্যার পরিপূরক খুঁজুন

  3. C++ এ সেট বিটের গণনা অনুসারে একটি অ্যারে সাজান

  4. C++ এ k সেট বিট সহ একটি সংখ্যাকে সর্বাধিক করার জন্য ন্যূনতম ফ্লিপস প্রয়োজন।