这是破解第5版编码采访的代码--我是从https://code.google.com/p/ctci/source/browse/trunk/Java/Introduction/CompareBinaryToHex/CompareBinaryToHex.java?spec=svn18&r=3 (不想从书中上传几页的图片)得到的,这是代码
public class CompareBinaryToHex {
public static int digitToValue(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
} else if (c >= 'A' && c <= 'F') {
return 10 + c - 'A';
} else if (c >= 'a' && c <= 'f') {
return 10 + c - 'a';
}
return -1;
}
public static int convertToBase(String number, int base) {
if (base < 2 || (base > 10 && base != 16)) return -1;
int value = 0;
for (int i = number.length() - 1; i >= 0; i--) {
int digit = digitToValue(number.charAt(i));
if (digit < 0 || digit >= base) {
return -1;
}
int exp = number.length() - 1 - i;
value += digit * Math.pow(base, exp);
}
return value;
}
public static boolean compareBinToHex(String binary, String hex) {
int n1 = convertToBase(binary, 2);
int n2 = convertToBase(hex, 16);
if (n1 < 0 || n2 < 0) {
return false;
} else {
return n1 == n2;
}
}
public static void main(String[] args) {
System.out.println(compareBinToHex("111001011", "1CB"));
}
}基本上,这个类compareBinToHex中的一个方法接受二进制数和十六进制数的字符串表示,并返回它们是否相等(以十进制值表示)。它使用convertToBase方法将该基数转换为十进制。我的问题是对于convertToBase方法,为什么允许2-9和16的基本输入,而11-15的基本输入却不允许?(范围为2-9和16的基本输入不会返回-1 if块),作者后来总结说,最好编写更灵活、更通用的代码,我同意这一点,这也是我对11-15基本输入的支持理由。比如说,如果你使用的是基数11,我认为convertToBase仍然应该能做到这一点,因为你在计算digitToValue的逻辑(A到F)后面的“A”(A)。她为什么不允许这些输入呢?
发布于 2014-12-29 02:40:03
因为很少有人需要一个基地(或http://en.wikipedia.org/wiki/Radix) 11,12,13,14或15计算器。需要注意的是,8是八进制,2是二进制,10是十进制,16是十六进制。我会进一步建议你明确地检查其中之一,
if (base != 2 && base != 8 && base != 10 && base != 16) return -1;https://stackoverflow.com/questions/27682739
复制相似问题