Problem 1061 - ACM码
Time Limit: 1000MS Memory Limit: 65536KB Difficulty:
Total Submit: 153 Accepted: 81 Special Judge: No
Description
大家都很熟悉十进制,二进制,今天我们来讨论另外一种特殊的码--ACM码,大家先参照下下面的对应关系,本质上就是第 I 个 ACM 码值是在与第 I-1个 ACM 码之间只有一个 1 不同,当对应的十进制数大于 15 时大家可以依次类推出来
十进制 二进制数 ACM码
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000
Input
第一行一个正整数 Case,代表多少组数据 (Case<=100)
第二行到第 Case+1 行每组数据一个整数 n; (n<=2000);
Output
一共 Case 行,每行一个整数代表输入对应数的 ACM 的码对应的十进制数
Sample Input
2
2
3
Sample Output
3
2
Hint
Source
wudired
http://www.
格雷码与二进制码的转换,看上边的超链接吧。不过我有点不明白代码的意思,位运算不太明白。杨大哥给解释下好吗?
程序代码:
#include <stdio.h>
static int DecimaltoGray( int x)
{
return x^(x>>1);
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d\n",DecimaltoGray(n));
}
}
[
本帖最后由 C_戴忠意 于 2012-12-7 22:08 编辑 ]