কম্পিউটার

সি প্রোগ্রামে 2^X – 1 আকারে একটি সংখ্যা তৈরি করার পদক্ষেপগুলি মুদ্রণ করুন।


একটি সংখ্যা n দেওয়া হলে, Xor অপারেশন ব্যবহার করে সংখ্যাটিকে 2^X-1 আকারে করার জন্য আমাদের ধাপগুলি প্রিন্ট করতে হবে।

  • আমাদের যেকোনো 2^M-1 দিয়ে নম্বরটি XOR করা উচিত , যেখানে M বিজোড় ধাপে আপনার দ্বারা নির্বাচিত হয়েছে৷
  • জোড় ধাপে সংখ্যাটি 1 দ্বারা বৃদ্ধি করুন

n 2^X-1 না হওয়া পর্যন্ত ধাপটি সম্পাদন করতে থাকুন এবং সমস্ত ধাপ প্রিন্ট করুন

উদাহরণ

Input: 22
Output:
   Step 1 : Xor with 15
   Step 2: Increase by 1
   Step 3 : Xor with 7
   Step 4: Increase by 1
   Step 5 : Xor with 1
Input:7
Output: No Steps to be performed

অ্যালগরিদম

int find_leftmost_unsetbit(int n)
START
STEP 1 : DECLARE AND ASSIGN ind = -1, i = 1
STEP 2 : LOOP WHILE n
   IF !(n & 1) THEN,
      ASSIGN ind WITH i
   END IF
   INCREMENT i BY 1
   LEFT SHIFT n BY 1
END WHILe
STEP 3 : RETURN ind
STOP
void perform_steps(int n)
START
STEP 1 : DECLARE AND ASSIGN left = find_leftmost_unsetbit(n)
STEP 2 : IF left == -1 THEN,
   PRINT "No Steps to be performed"
   RETURN
END IF
STEP 3 : DECLARE AND ASSIGN step = 1
STEP 4 : LOOP WHILE find_leftmost_unsetbit(n) != -1
   IF step % 2 == 0 THEN,
      INCREMENT n BY 1
      PRINT "Step n : Increase by 1\n"
   ELSE
      DECLARE AND ASSIGN m =
      find_leftmost_unsetbit(n)
      AND SET num = (pow(2, m) - 1)
      SET n = n ^ num
      PRINT "Step N : Xor with Num
   END IF
   INCREMENT step BY 1
END LOOP
STOP

উদাহরণ

#include <stdio.h>
#include <math.h>
//To find the leftmost bit
int find_leftmost_unsetbit(int n){
   int ind = -1;
   int i = 1;
   while (n) {
      if (!(n & 1))
         ind = i;
      i++;
      n >>= 1;
   }
   return ind;
}
void perform_steps(int n){
   // Find the leftmost unset bit
   int left = find_leftmost_unsetbit(n);
   //If there is no bit
   if (left == -1) {
      printf("No Steps to be performed\n");
      return;
   }
   // To count the number of steps
   int step = 1;
   // Iterate till number is in form of 2^x - 1
   while (find_leftmost_unsetbit(n) != -1) {
      // if the step is even then increase by 1
      if (step % 2 == 0) {
         n += 1;
         printf("Step %d: Increase by 1\n", step);
      }
      // if the step is odd then xor with 2^m-1
      else {
         // Finding the leftmost unset bit
         int m = find_leftmost_unsetbit(n);
         int num = (int)(pow(2, m) - 1);
         n = n ^ num;
         printf("Step %d : Xor with %d\n", step, num);
      }
      // To increase the steps
      step += 1;
   }
}
int main(){
   int n = 22;
   perform_steps(n);
   return 0;
}

আউটপুট

যদি আমরা উপরের প্রোগ্রামটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

তৈরি করবে
Step 1 : Xor with 15
Step 2 : Increase by 1
Step 3 : Xor with 7
Step 4 : Increase by 1
Step 5 : Xor with 1

  1. সি তে কঠিন এবং ফাঁপা রম্বস প্যাটার্ন প্রিন্ট করার প্রোগ্রাম

  2. সি-তে নম্বর প্যাটার্ন প্রিন্ট করার প্রোগ্রাম

  3. C-তে Z আকারে স্কোয়ার ম্যাট্রিক্স প্রিন্ট করার প্রোগ্রাম

  4. Z আকারে ম্যাট্রিক্স প্রিন্ট করার জন্য পাইথন প্রোগ্রাম