题目描述
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。 [2]在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。格雷码有多种编码形式。
二进制码转换成格雷码
二进制码转换成格雷码的规则如下:
- 保留二进制码的最高位作为格雷码的最高位。
- 格雷码的其余位为二进制码对应位与其上一位相异或。
转换示意图如下:
格雷码转换成二进制码
格雷码转换成二进制码的规则如下:
- 保留格雷码的最高位作为二进制码的最高位。
- 二进制码的其余位为格雷码对应位与二进制码上一位相异或。
转换示意图如下:
输入格式
输入只有一行,包括1个整数N。
输出格式
输出格雷码
样例输入content_copy
4
样例输出content_copy
110
代码实现:
#include<bits/stdc++.h>
using namespace std;
int n,r=2;
string s,c="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main(){
cin>>n;
n=n^n>>1;
while(n){
s=c[n%r]+s;
n/=r;
}
cout<<s;
return 0;
}