二进制转格雷码
G(n-1)=B(n-1) G(i)=B(i+1)异或B(i) ( 0 < i < n - 2 )
格雷码转二进制
原理
首先开始生成一位的0,1 然后两位的时在前面得到基础上加 每位前面加0,然后颠倒 每位前面再加1.
#include<cstdio>
#include<iostream>
#include <cstring>
#include<vector>
using namespace std;
//求格雷码 递推式子:G(n-1)=B(n-1) G(i)=B(i+1)异或B(i) (0<i<n-2)
//输出n位GRad码---普通方法
vector<string> My_grad;
void get_grad(int n)
{
//cout<<1<<endl;
My_grad.push_back("0");
My_grad.push_back("1");//前面两位
if(n>1)
{
//cout<<1<<endl;
for(int i=2;i<=n;i++)
{
vector<string> tmp;
for(int j=0;j<My_grad.size();j++)
{
tmp.push_back(My_grad[j]);
string s="0";
s+=tmp[j];
My_grad[j]=s;//
}
//翻转
for(int j=tmp.size()-1;j>=0;j--)
{
string s="1";
s+=tmp[j];
My_grad.push_back(s);
}
}
}
}
int main()
{
int n;
while(cin>>n)
{
get_grad(n);
for(int i=0;i<My_grad.size();i++)
cout<<My_grad[i]<<endl;
}
return 0;
}