1.求n位二进制格雷码中第k项
num^=(num/2); for(int i=1;i<=n;i++){ a[i]=num%2; num/=2; }
2.二进制格雷码与二进制编码的转换
//二进制码转格雷码 string BinaryToGray(string binary) { string gray(binary.size(), '0'); //1、保留二进制码的最高位作为格雷码的最高位 gray[0] = binary[0]; //2、格雷码的其余位为二进制码对应位与其上一位相异或 for (size_t i = 1; i < gray.size(); i++) { gray[i] = (binary[i - 1] - '0') ^ (binary[i] - '0') + '0'; } return gray; }
//格雷码转二进制码 string GrayToBinary(string gray) { string binary(gray.size(), '0'); //1、保留格雷码的最高位作为二进制码的最高位 binary[0] = gray[0]; //2、二进制码的其余位为格雷码对应位与二进制码上一位相异或 for (size_t i = 1; i < gray.size(); i++) { binary[i] = (binary[i - 1] - '0') ^ (gray[i] - '0') + '0'; } return binary; }
3.超级格雷码
void dfs(int k,int t){ if(k==n+1){ for(int i=n;i>=1;i--){ if(a[i]<10)cout<<a[i]; else cout<<char(a[i]-10+'A'); } cout<<'\n'; return; } if(t==1){ for(int i=B-1;i>=0;i--){ a[k]=i; if(i%2==1)dfs(k+1,0); else dfs(k+1,1); } }else{ for(int i=0;i<B;i++){ a[k]=i; if(i%2==1)dfs(k+1,1); else dfs(k+1,0); } } }
标签:格雷,二进制码,string,gray,binary,size From: https://www.cnblogs.com/zhanghx-blogs/p/17162291.html