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

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

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

我们应该进行异或任意 2^M-1 的数字,其中 M 由您选择,在奇数步长。 在偶数步长,将数字增加 1

继续执行该步骤,直到n变为2^X-1,并打印所有步骤

示例

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

算法

int find_leftmost_unsetbit(int n)STARTSTEP 1 : DECLARE AND ASSIGN ind = -1, i = 1STEP 2 : LOOP WHILE n   IF !(n & 1) THEN,      ASSIGN ind WITH i   END IF   INCREMENT i BY 1   LEFT SHIFT n BY 1END WHILeSTEP 3 : RETURN indSTOPvoid perform_steps(int n)STARTSTEP 1 : DECLARE AND ASSIGN left = find_leftmost_unsetbit(n)STEP 2 : IF left == -1 THEN,   PRINT "No Steps to be performed"   RETURNEND IFSTEP 3 : DECLARE AND ASSIGN step = 1STEP 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 1END LOOPSTOP

示例

#include #include //To find the leftmost bitint 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 15Step 2 : Increase by 1Step 3 : Xor with 7Step 4 : Increase by 1Step 5 : Xor with 1

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:42:40
下一篇 2025年12月17日 19:48:29

相关推荐

  • 在C语言中,预增量(或预减量)

    增量运算符用于将值加一,而减量运算符的作用与增量相反。自减运算符将值减一。 以下是 C 语言预自增运算符的语法, ++variable_name; 这是C语言预减运算符的语法, –variable_name; 让我们看看预自增和预自减运算符之间的区别。 立即学习“C语言免费学习笔记(深入)”; 预…

    好文分享 2025年12月17日
    000
  • 将阶乘n表示为连续数字的和

    我们将讨论两种方法来找出如何将数字的阶乘表示为连续数字的总和。第一种方法是直接而简单的方法,而在另一种方法中,我们使用算术级数的概念来使其在占用的时间和空间方面不那么复杂。 问题陈述 给定一个数字,我们需要找出可以将数字的阶乘表示为连续自然数之和的方法。 这涉及两个不同的功能 – 求数字…

    2025年12月17日
    000
  • 使用C++编写,找到和小于K的子数组的数量

    在这篇文章中,我们将使用C++找出具有小于K的和的子数组的数量。在这个问题中,我们有一个数组arr[]和一个整数K。现在我们需要找出和小于K的子数组。以下是示例 − Input : arr[] = {1, 11, 2, 3, 15}K = 10Output : 4{1}, {2}, {3} and …

    2025年12月17日
    000
  • 找到最长的奇数奇偶校验子串

    简介 在本教程中,我们开发了一种查找最大长度奇奇偶校验子字符串的方法。子串中的奇校验意味着 1 在字符串中重复的次数是奇数。 C++ 中的奇偶校验定义了位集编号,并且在数字中为 1。奇偶校验有两种类型:偶校验和奇校验。 当二进制表示中“1”的总数为奇数时,称为奇奇偶校验字符串。在本教程中,我们使用 …

    2025年12月17日
    000
  • 最大化给定时间内的缺失值,格式为HH:MM

    将给定的长度为五的字符串表示为HH:MM格式的时间。字符串中可能包含一些“?”我们必须用任何数字替换它们,以使结果成为有效的时间,且可能是最大的可能时间。此外,给定的字符串数字将是有效的,并且“:”将出现在字符串的确切位置。我们将首先使用蛮力法,然后使用高效方法。 示例示例 输入 1 Given s…

    2025年12月17日
    000
  • 计算给定值的以10为底的对数的C++程序

    各种应用中的自然计算相对需要以 10 为底的对数。对于竞争性考试,有一些快速方法可以记住一些日志值。在编程时,有几种使用库函数计算对数结果的方法以及一些快捷方式。在这篇文章中,我们将介绍几种在 C++ 中计算给定数字的以 10 为底的对数的方法。 使用 log10() 函数 用于确定给定参数的以 1…

    2025年12月17日
    000
  • 打印从1到100的数字的程序,不使用循环

    这里我们将看到如何编写一个 C 程序,可以在不使用任何命令的情况下打印从 1 到 100 的数字一种循环。 这个问题可以使用递归来解决。我们将创建一个函数,该函数将被调用递归地。我们知道,递归函数基本上有两个部分。基本情况和递归调用等操作。在此函数中,基本情况是参数 n 大于 1。直到达到 1 为止…

    2025年12月17日
    000
  • 计算三个不重叠的子字符串,将它们连接起来形成一个回文串

    简介 在本教程中,我们将详细阐述一种从给定字符串 s 中查找三个不重叠子字符串的方法,并且当所有子字符串组合在一起时,它们形成一个回文。为了解决此任务,我们使用 C++ 编程语言的字符串类功能。 字符串中的回文表示该字符串在向前和向后方向上读起来都相同。回文字符串示例是 Madam。 假设有一个字符…

    2025年12月17日
    000
  • 使用STL根据因子数量进行排序

    使用STL对向量进行排序是小菜一碟。我们可以使用著名的sort()函数来完成这个任务。真正的挑战是计算每个数字的因子数量。 因子是能够完全整除另一个数的数字,即余数为零。 遍历所有数字以计算因子可能是一种方法,但我们将在本文中尝试优化和达到高效的解决方案。 问题陈述 根据每个数字的因子数量按升序对给…

    2025年12月17日
    000
  • 计算长度为N的二进制字符串,它们是子字符串的重复拼接

    本文的目的是实现一个程序,用于计算由一个子字符串重复连接而成的长度为N的二进制字符串的数量。 目标是确定通过重复连接给定文本的单个子字符串,可以创建多少长度为N的二进制字符串,其中N是一个正整数。 问题陈述 实现一个程序,用于计算重复连接子字符串的长度为N的二进制字符串的数量。 示例示例1 Let …

    2025年12月17日
    000
  • 对于Q个查询,将以下内容翻译成中文:在三进制字符串中,需要替换的最小字符数以删除所有回文子字符串

    回文字符串是指与其反转字符串相等的字符串。给定一个包含‘0’、‘1’和‘2’的字符串,以及一个长度为N的数组Q,给定数组的每个索引表示一个范围,范围由一对形式的值表示。我们需要找到在给定范围内需要替换的最小字符数,以确保该范围内没有任何回文子字符串。 示例示例 Input1: string s: “…

    2025年12月17日
    000
  • 在C语言中,有一种用于重复值的简写数组表示法吗?

    一个数组存储相同数据类型的多个数值。对于一个数组来说,可能会出现需要存储相同的2-3个值的情况,即需要存储3,3,3,3。 对于这种情况,编程语言C提供了一种简单的方法来创建一个包含这种重复值的数组,以减轻程序员的工作负担。 语法 [startofRepeatingSeq … Endo…

    2025年12月17日
    000
  • 如何使用C/C++检查输入是否为整数?

    在这里,我们将看到如何检查给定的输入是整数字符串还是普通字符串。整数字符串将包含在0-9范围内的所有字符。解决方案非常简单,我们将逐个检查每个字符,然后检查它是否是数字。如果是数字,则指向下一个字符,否则返回false值。 示例 #include using namespace std;bool i…

    2025年12月17日
    000
  • 计算所有整数的排列,这些排列可以根据给定的条件形成一个无环图

    对于整数N以内的阶段进行计数,形成非循环图需要对每一个可能的变化进行调查,并检查它们是否根据给定条件形成非循环图。这些条件可能与由变化形成的协调图结构相关,其中循环的缺失表示非循环性。这个问题涉及图论的概念,并可以通过深度优先搜索或动态规划来解决。深度优先搜索通过递归地调查每个阶段,动态规划通过存储…

    2025年12月17日
    000
  • 算法分类与示例

    算法的分类有助于选择最适合特定任务的算法,使开发人员能够优化他们的代码并获得更好的性能。在计算机科学中,算法是一组明确定义的指令,用于解决问题或执行特定任务。这些算法的效率和有效性对于确定程序的整体性能至关重要。 在本文中,我们将讨论两种常见的算法分类方法,即基于时间复杂度和基于设计技术。 语法 主…

    2025年12月17日
    000
  • 动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译时确定内存大小。这使得程序能够更灵活地管理内存,并有效地利用可用的系统资源

    这里我们将了解什么是 C 语言中的动态内存分配。C 编程语言提供了多个用于内存分配和管理的函数。这些函数可以在 头文件中找到。以下函数用于内存分配。 函数 描述 void *calloc(int num, int size);这个函数分配一个由 num 个元素组成的数组,每个元素的大小以字节为单位。…

    2025年12月17日
    000
  • 使用C++找到数组中唯一配对的数量

    我们需要适当的知识才能在 C++ 的数组语法中创建几个唯一的对。在查找唯一对的数量时,我们计算给定数组中的所有唯一对,即可以形成所有可能的对,其中每个对应该是唯一的。例如 – Input : array[ ] = { 5, 5, 9 }Output : 4Explanation : Th…

    2025年12月17日
    000
  • 查找一个度序列是否能够形成一个简单图 | Havel-Hakimi算法

    在图论中,度链表示顶点度的顺序。确定度的顺序是否可以产生一个简单图或者一个没有平行或自环边的图是至关重要的。在本博客中,我们将探讨三种解决这个问题的方法,重点介绍Havel-Hakimi算法。我们将详细介绍每种技术使用的算法,提供相应的代码表示和适当的标题,并展示每种方法的独特结果。 使用的方法 H…

    2025年12月17日
    000
  • 中心十二边形数

    描绘十二边形的图形数字称为十二边形数。中心十二边形数由中心的一个点和连续十二边形(即 12 边多边形)层中围绕该点的其他点表示。 中心十二边形数可以通过下图更好地解释。 对于n=1,中心只有一个点。因此输出为1。 对于n=2,中心有一个点,周围是一个十二边形。因此,总共的点数将是13。所以下一个中心…

    2025年12月17日
    000
  • 将给定二叉搜索树中的所有较大值添加到每个节点上

    BST或二叉搜索树是一种二叉树形式,其中所有左节点的值小于根节点的值,所有右节点的值大于根节点的值。对于这个问题,我们将取一个二叉树并将所有大于当前节点值的值添加到它中。问题“向BST的每个节点添加所有较大的值”被简化为对于BST,将所有大于当前节点值的节点值添加到该节点值。 向BST中的每个节点添…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信