Home > Backend Development > C++ > body text

Print the steps to generate a number of the form 2^X - 1 in a C program

WBOY
Release: 2023-09-07 14:01:02
forward
501 people have browsed it

打印在C程序中生成形如2^X - 1的数字的步骤

Given a number n, we must use the XOR operation to print the steps to make the number into the form 2^X-1.

  • We should XOR any 2^M-1 numbers, where M is chosen by you, in odd steps.
  • In even steps, increase the number by 1

Continue to perform this step until n becomes 2^X-1 and print all steps

Example

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
Copy after login

Algorithm

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</p><p>"
   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
Copy after login

Example

#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</p><p>");
      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</p><p>", 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</p><p>", step, num);
      }
      // To increase the steps
      step += 1;
   }
}
int main(){
   int n = 22;
   perform_steps(n);
   return 0;
}
Copy after login

Output

If we run the above program then it will generate the following 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
Copy after login

The above is the detailed content of Print the steps to generate a number of the form 2^X - 1 in a C program. For more information, please follow other related articles on the PHP Chinese website!

source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!