用整型数组编写5位格雷码 c语言,C语言输出格雷码 - osc_cqo7gwoe的个人空间 - OSCHINA - 中文开源技术交流社区...

格雷码是以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

#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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值