#include <stdio.h>

#include <stdlib.h>

#define MAXBIT 20

#define TRUE 1

#define CHANGE_BIT(x) x = ((x) == '0' ? '1' : '0')

#define NEXT(x) x = (1 - (x))

int main(void) {

char digit[MAXBIT];

int i, bits, odd;

printf("输入位元数:");

scanf("%d", &bits);

for(i = 0; i < bits; i++) {

digit[i] = '0';

printf("0");

}

printf("\n");

odd = TRUE;

while(1) {

if(odd)

CHANGE_BIT(digit[0]);

else {

// 计算第一个1的位置

for(i = 0; i < bits && digit[i] == '0'; i++) ;

if(i == bits - 1) // 最后一个Gray Code

break;

CHANGE_BIT(digit[i+1]);

}

for(i = bits - 1; i >= 0; i--)

printf("%c", digit[i]);

printf("\n");

NEXT(odd);

}

return 0;

}