二进制码转换成格雷码

二进制码转换成格雷码的规则如下:

  • 保留二进制码的最高位作为格雷码的最高位。
  • 格雷码的其余位为二进制码对应位与其上一位相异或。

格雷码转换成二进制码

格雷码转换成二进制码的规则如下:

  • 保留格雷码的最高位作为二进制码的最高位。
  • 二进制码的其余位为格雷码对应位与二进制码上一位相异或。

代码如下

//顶级垃圾程序
//A very bad program
#include <bits/stdc++.h>
using namespace std;

string BinaryToGray(string s){
	int len = s.size();
	string ans(len, '0');
	ans[0] = s[0];
	for (int i = 1; i < len; i++){
		ans[i] = (ans[i - 1] - '0') ^ (s[i] - '0') + '0';
	}
	return ans;
}
string GrayToBinary(string s){
	int len = s.size();
	string ans(len, '0');
	ans[0] = s[0];
	for (int i = 1; i < len; i++){
		ans[i] = (ans[i - 1] - '0') ^ (s[i] - '0') + '0';
	}
	return ans;
}
int main(){
	char a;
	string s;
	cin >> a >> s;
	if (a == 'B') cout << GrayToBinary(s); //转二进制
	else if (a == 'G')cout << BinaryToGray(s); //转格雷码
	else cout << "Wrong";
	return 0;
}

常用的二进制数与格雷码间的转换关系如下表:

image

输入样例

B 0011

输出样例

0010