在Java中将十进制转换为格雷码
最近有一个问题是:编写将十进制数转换为n位格雷码的算法。
因此,例如:使用1位(最简单):
0 -> 01 -> 1
使用2位
0 -> 001 -> 01
2 -> 11
3 -> 10
使用3位
0 -> 0001 -> 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