1. 程式人生 > >C語言輸出格雷碼

C語言輸出格雷碼

格雷碼是以n位的二進位制來表示數。
與普通的二進位制表示不同的是,它要求相鄰兩個數字只能有1個數位不同。
首尾兩個數字也要求只有1位之差。

有很多演算法來生成格雷碼。以下是較常見的一種:
從編碼全0開始生成。
當產生第奇數個數時,只把當前數字最末位改變(0變1,1變0)
當產生第偶數個數時,先找到最右邊的一個1,把它左邊的數字改變。
用這個規則產生的4位格雷碼序列如下:

0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
#include<stdio.h>
#include<string.h>
#include<math.h>
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;
}