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

WBOY
WBOY 转载
2023-09-07 14:01:02 202浏览

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

给定一个数字 n,我们必须使用异或运算来打印将数字制成 2^X-1 形式的步骤。

  • 我们应该进行异或任意 2^M-1 的数字,其中 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

" 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

"); 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

", 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

", 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

以上就是打印在C程序中生成形如2^X - 1的数字的步骤的详细内容,更多请关注php中文网其它相关文章!

声明:本文转载于:tutorialspoint,如有侵犯,请联系admin@php.cn删除