#include <stdio.h>
#include <stdlib.h>
/*格雷码转二进制*/
int grayToBin(int n)
{
int size = 0;
int res[255];
int out = 0;
int flag = 0;
/*先缓存*/
while (n)
{
res[size++] = n%2;
n /= 2;
}
/*利用转换关系求出最后的结果*/
for (int i=size-1; i>=0; i--)
{
flag = res[i]^flag;
out = out*2+flag;
}
return out;
}
/*输入N,输出格雷码*/
void grayCode(int n)
{
int max = (1<<n);
int gray;
for (int i=0; i<max; i++)
{
gray = i^(i>>1);
printf("二进制 %d ", grayToBin(gray));
printf("格雷码 %d\n", gray);
}
}
/*TEST*/
int main()
{
grayCode(3);
return 0;
}