[C] 输出n位格雷码 →→→→→进入此内容的聊天室

来自 , 2019-08-02, 写在 C, 查看 154 次.
URL http://www.code666.cn/view/bd0cc810
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAXBIT 20
  5. #define TRUE 1
  6. #define CHANGE_BIT(x) x = ((x) == '0' ? '1' : '0')
  7. #define NEXT(x) x = (1 - (x))
  8.  
  9. /*输出格雷码*/
  10.  
  11. /* Gray Code是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数好了,任两个数之间只有一个位元值不同,例如以下为3位元的Gray Code:
  12. 000 001 011 010 110 111 101 100*/
  13.  
  14. int main ( void )
  15. {
  16.         char digit[MAXBIT];
  17.         int i, bits, odd;
  18.  
  19.         printf ( "输入位元数:" );
  20.         scanf ( "%d", &bits );
  21.  
  22.         for ( i = 0; i < bits; i++ )
  23.         {
  24.                 digit[i] = '0';
  25.                 printf ( "0" );
  26.         }
  27.  
  28.         printf ( "\n" );
  29.  
  30.         odd = TRUE;
  31.  
  32.         while ( 1 )
  33.         {
  34.                 if ( odd )
  35.                         CHANGE_BIT ( digit[0] );
  36.                 else
  37.                 {
  38.                         // 计算第一个1的位置
  39.                         for ( i = 0; i < bits && digit[i] == '0'; i++ ) ;
  40.                         if ( i == bits - 1 ) // 最后一个Gray Code
  41.                                 break;
  42.                         CHANGE_BIT ( digit[i+1] );
  43.                 }
  44.                 for ( i = bits - 1; i >= 0; i-- )
  45.                         printf ( "%c", digit[i] );
  46.  
  47.                 printf ( "\n" );
  48.                 NEXT ( odd );
  49.         }
  50.         return 0;
  51. }
  52.  

回复 "输出n位格雷码"

这儿你可以回复上面这条便签

captcha