C語言輸出格雷碼
阿新 • • 發佈:2018-11-23
格雷碼是以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; }