格雷码是以n位的二进制来表示数。
与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同。 首尾两个数字也要求只有1位之差。有很多算法来生成格雷码。以下是较常见的一种:
从编码全0开始生成。 当产生第奇数个数时,只把当前数字最末位改变(0变1,1变0) 当产生第偶数个数时,先找到最右边的一个1,把它左边的数字改变。 用这个规则产生的4位格雷码序列如下:0000000100110010011001110101010011001101111111101010101110011000
#include#include #include void change(char &ch) { if (ch == '0') ch = '1'; else ch = '0';}int main() { int n; scanf("%d", &n); //输入需要转换的数 int size = log2(n) + 1; //计算所需位数 char *a = new char[size]; a[size] = '\0'; memset(a, '0', size); //初始化数组 for (int i = 0; i <= n; i++) { if (i % 2) change(a[size - 1]); //奇数改末尾 else for (int j = size - 1; j > 0; j--) { //偶数操作 if (a[j] == '1') { change(a[j - 1]); break; } } printf("%s\n", a); //此行可去除 } printf("result = %s\n", a); return 0;}