在Java中将十进制转换为格雷码

最近有一个问题是:编写将十进制数转换为n位格雷码的算法。

因此,例如:使用1位(最简单):

0 -> 0

1 -> 1

使用2位

0 -> 00

1 -> 01

2 -> 11

3 -> 10

使用3位

0 -> 000

1 -> 001

2 -> 011

3 -> 010

4 -> 110

5 -> 111

6 -> 101

7 -> 100

回答:

写下以下内容,并认为我会分享它,因为在这里看不到许多Java实现:

static String getGreyCode(int myNum, int numOfBits) {

if (numOfBits == 1) {

return String.valueOf(myNum);

}

if (myNum >= Math.pow(2, (numOfBits - 1))) {

return "1" + getGreyCode((int)(Math.pow(2, (numOfBits))) - myNum - 1, numOfBits - 1);

} else {

return "0" + getGreyCode(myNum, numOfBits - 1);

}

}

static String getGreyCode(int myNum) {

//Use the minimal bits required to show this number

int numOfBits = (int)(Math.log(myNum) / Math.log(2)) + 1;

return getGreyCode(myNum, numOfBits);

}

为了对此进行测试,您可以通过以下两种方式之一进行调用:

System.out.println("Grey code for " + 7 + " at n-bit: " + getGreyCode(7));

System.out.println("Grey code for " + 7 + " at 5-bit: " + getGreyCode(7, 5));

或遍历所有可能的格雷码组合,直到第i位:

for (int i = 1; i <= 4; i++) {

for (int j = 0; j < Math.pow(2, i); j++)

System.out.println("Grey code for " + j + " at " + i + "-bit: " + getGreyCode(j, i));

希望对人们有帮助!

以上是 在Java中将十进制转换为格雷码 的全部内容, 来源链接: utcz.com/qa/397297.html

回到顶部