C++程序,使用递归将二进制数转换为格雷码

c++程序,使用递归将二进制数转换为格雷码

格雷码或反射二进制码是一种特殊类型的数字二进制表示形式,其中两个连续值仅在一位上不同。例如,1和2的二进制等价物是01和10,这里有两个位正在改变。但在格雷码中,1是01,2是11,只有一位在变化。在本文中,我们将了解如何使用 C++ 中的递归将给定的二进制数转换为其等效的格雷码。

将数字作为十进制整数传递

在第一个示例中,我们提供十进制数字。数字只有 0 和 1,但数字是十进制的。例如,如果我们想传递 6 作为输入,我们传递 110(十进制的一百零 10),这相当于二进制表示的 6。该程序也类似地返回输出。

算法

定义一个函数solve(),这将采用二进制数如果 n 为 0,则返回0如果结束最后 := n 的最后一位second_last = n 的倒数第二位如果最后一位和倒数第二位不同,则输入1并调用solve(n切割最后一位)否则输入0并调用solve(n切割最后一位)如果结束solve() 函数结束

示例

#include using namespace std;int solve( int n ) {   if( n == 0 )   return 0;   int last = n % 10;   int second_last = (n / 10) % 10;   if( (last && !second_last) || (!last && second_last) ) {      return (1 + 10 * solve( n / 10 ));   }   return (10 * solve( n / 10 ));}int main(){   cout << "Gray code for the number 2 (10) is: " << solve( 10 ) << endl;   cout << "Gray code for the number 6 (110) is: " << solve( 110 ) << endl;   cout << "Gray code for the number 13 (1101) is: " << solve( 1101 ) << endl;   cout << "Gray code for the number 93 (1011101) is: " << solve( 1011101 ) << endl;}

输出

Gray code for the number 2 (10) is: 11Gray code for the number 6 (110) is: 101Gray code for the number 13 (1101) is: 1011Gray code for the number 93 (1011101) is: 1110011

结论

可以通过对连续位应用异或运算来找到格雷码或反射二进制码。同样的事情是通过取给定数字的最后两位来实现的,当它们不相同时,递归调用该函数并传递除最后一位之外的数字,结果将与 1 连接,否则与 0 连接,依此类推在。在示例中,我们提供了整数十进制数的输入,输出也采用整数十进制格式。可以通过采用字符串类型输入来解决相同的问题,该输入可用于在需要时提供更大的输入。

以上就是C++程序,使用递归将二进制数转换为格雷码的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:21:56
下一篇 2025年12月17日 03:54:57

相关推荐

  • 递归冒泡排序的C程序

    冒泡排序是最简单的排序算法之一,用于通过比较相邻元素对数据进行排序。所有元素都分阶段进行比较。第一阶段将最大值放在最后,第二阶段将第二大元素放在倒数第二个位置,依此类推,直到完整列表排序完毕。 冒泡排序算法 int arr[5]= { 5,4,2,1,3 }; int i, j ; 从索引 i=0 …

    2025年12月17日
    000
  • 将以下内容翻译为中文:使用递归在C程序中将二进制转换为格雷码

    二进制数是只有两位 0 和 1 的数字。 格雷码是一种特殊类型的二进制数,其属性是代码的两个连续数字 em> 的差异不能超过一位。格雷码的这一特性使其在 K-map、纠错、通信等方面更加有用。 这使得二进制到格雷码的转换成为必要。那么,让我们看一下将二进制转换为格雷码的算法使用递归。 示例 让…

    2025年12月17日
    000
  • 二进制字符串的字典序排名

    在本文中,我们将探讨一个涉及二进制字符串和词典序的有趣问题。我们的任务是找到给定二进制字符串的词典序排名。我们将使用C++来演示我们的解决方案,C++是一种以其高效性和灵活性而闻名的流行编程语言。 理解词典顺序 词典顺序(也称为字母顺序或字典顺序)是指根据单词的组成字母的字母顺序排列单词。 问题陈述…

    2025年12月17日
    000
  • 安排一个二进制字符串,以在索引范围内获得最大值。C/C++?

    对于一个由0和1组成的给定字符串,我们给出了M个不相交的范围A,B(A 活动是找到一个合法或有效的排列,同时满足以下两个条件− 所有M个给定范围之间的数字之和最大。 字符串将是字典序最大的。字符串1100的字典序比字符串1001高。 立即学习“C++免费学习笔记(深入)”; 示例 Input1110…

    2025年12月17日
    000
  • 递归程序在C++中检查一个数字是否是回文数

    我们得到一个整数作为输入。目标是使用递归来确定输入数字 Num 是否为回文。 要检查一个数字是否为回文,请反转该数字并检查两个数字是否相同。如果反转后的数等于原数,则为回文。 示例 输入− Num = 34212; 输出− 34212 不是回文! 解释− 如果我们反转 34212,则得到 21243…

    2025年12月17日
    000
  • 将两个数字的二进制表示长度调整为相等后进行异或运算

    XOR,或异或,是一种布尔逻辑运算,用于生成奇偶校验位,用于错误检查、容错等。使用各种符号来表示此运算:^、⊕、⊻等。 异或逻辑 仅当两个参数不同时,XOR 运算才为真。也就是说,相同位异或为0,不同位异或为1。 相同的位 – 0^0=0 1^1=0 不同的位 − 0^1=1 1 ^ 0…

    2025年12月17日
    000
  • 在C++中递归插入和遍历链表

    我们得到了用于形成链表的整数值。任务是使用递归方法先插入然后遍历单链表。 在末尾递归添加节点 如果 head 为 NULL → 将节点添加到 head 否则添加到 head( head → next ) 递归遍历节点 如果 head 为 NULL → 退出 立即学习“C++免费学习笔记(深入)”; …

    2025年12月17日
    000
  • 递归解码一个以计数后跟子字符串编码的字符串

    在这个问题中,我们需要通过重复添加总计数次数来解码给定的字符串。 我们可以采用三种不同的方法来解决问题,并且可以使用两个堆栈或一个堆栈来解决问题。另外,我们可以在不使用两个堆栈的情况下解决问题。 问题陈述 – 我们给出了一个字符串 str ,其中包含左括号和右括号、字母和数字字符。我们需…

    2025年12月17日
    000
  • 根据给定条件,从数组中构建一个长度为K的二进制字符串

    在本教程中,我们需要构造一个长度为 K 的二进制字符串,如果使用数组元素可以实现等于 I 的子集和,则它的第 i 个索引处应包含“1”。我们将学习两种解决问题的方法。在第一种方法中,我们将使用动态规划方法来检查子集和等于索引“I”是否可能。在第二种方法中,我们将使用位集通过数组元素查找所有可能的和。…

    2025年12月17日
    000
  • 排序二进制字符串所需删除的最小字符数,以使其按升序排列

    在计算机科学中,字符串操作是一个重要的主题,涉及到拼接、子串、反转等操作。与字符串操作相关的一个常见问题是从二进制字符串中移除所有的0。在本文中,我们将讨论一种使用最少数量的非相邻对翻转来解决这个问题的算法。 问题陈述 给定一个二进制字符串,我们必须使用最少次数的非相邻对翻转来删除字符串中的所有 0…

    2025年12月17日
    000
  • 十进制转二进制的C程序?

    将整数从十进制 (base-10) 转换为二进制 (base-2)。假设整数的大小为 32 位,需要将数字除以基数。计算机使用它来将整数值更改为计算机的字节。 Input:10Output:1010 说明 如果十进制数是10 10除以2余数为零。因此,0。 将 10 除以 2。新数字为 10/2 =…

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

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

    2025年12月17日
    000
  • 十进制转二进制的C语言程序实现

    问题 如何使用C语言中的函数将十进制数转换为二进制数? 解决办法 在在这个程序中,我们在 main() 中调用一个二进制函数。被调用的二进制数转换函数将执行实际的转换。 我们使用的将十进制数转换为二进制数的调用函数的逻辑如下 – while(dno != 0){ rem = dno % …

    2025年12月17日 好文分享
    000
  • 如何使用C语言将二进制转换为十六进制?

    二进制数以 1 和 0 表示。 16 位的十六进制数系统为 {0,1,2,3…..9, A(10), B(11),… …F(15)} 为了从二进制表示转换为十六进制表示,位串 id 被分组为 4 位块,从最低有效侧开始称为半字节。每个块都替换为相应的十六进制数字。 让我们看一个示例,以清楚地了解十六…

    2025年12月17日
    000
  • 使用递归从已排序的链表中删除重复项

    链表是连接在一起的元素序列。每个列表都有一个头和一系列节点,每个节点都有当前节点的数据并链接到下一个节点。链表的基本操作是插入、删除、查找和删除。 从排序链表中删除重复项 删除节点的一​​种方法是使用递归。其思想是将每个节点与其相邻节点进行比较,并删除它们相等的重复节点。 我们的递归调用将返回到下一…

    2025年12月17日
    000
  • 高级主定理用于分治递归

    分而治之 是一种基于递归地将问题分解为多个相似类型的子问题,并且这些子问题可以很容易地解决的算法。 示例 让我们举一个例子来更深入地了解分而治之的技巧 – function recursive(input x size n) if(n < k) Divide the input i…

    2025年12月17日
    000
  • 递归函数在C++中进行子串搜索

    给定两个字符串 Str 和 subStr 作为输入。目标是确定 subStr 中存在的文本是否作为子字符串存在于 Str 中。如果整个 X 在 Y 中至少出现一次,则字符串 X 称为 Y 的子串。我们将使用递归方法来执行此操作。 例如 输入− Str = “tutorialspoint” subSt…

    2025年12月17日
    000
  • 递归程序打印所有小于N的仅由数字1或3组成的数字

    We are given an integer variable as N storing the positive integer type value. The task is to recursively print all the numbers less than given value …

    2025年12月17日
    000
  • 将数组表示的数字加1(递归方法)

    给定一个数组,该数组是由非负数字表示的数字的集合,将数字加1(增加由数字表示的数字)。数字存储方式是最高位数字是数组的第一个元素。 要将数字加1到由数字表示的数字 从数组末尾开始,加法意味着将最后一个数字4舍入为5。 如果最后一个元素是9,则将其变为0并进位=1。 对于下一次迭代,检查进位,如果加到…

    2025年12月17日
    000
  • 二分搜索(递归和迭代)在C程序中的实现

    二分搜索是一种用于在排序数组中查找元素(目标值)位置的搜索算法。在应用二分搜索之前,数组应该被排序。 二分搜索也被称为对数搜索、二分查找、半区间搜索。 工作原理 二分搜索算法通过将要搜索的元素与数组的中间元素进行比较,并根据此比较结果执行所需的过程。 情况1 – 元素 = 中间值,找到元…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信