Метод toHex(String) должен переводить строковое представление двоичного числа, полученное в качестве входящего параметра, из двоичной системы счисления в шестнадцатеричную и возвращать его строковое представление. Условия:
1. Методы Integer.toBinaryString(int) и Long.toBinaryString(int) использовать нельзя.
2. Методы Integer.toHexString(int) и Long.toHexString(int) использовать нельзя.
3. Методы Integer.parseInt(String, int) и Long.parseLong(String, int) использовать нельзя.
4. Методы Integer.toString(int, int) и Long.toString(long, int) использовать нельзя.
5. Объект типа BigInteger использовать нельзя.
6. Объект типа BigDecimal использовать нельзя.
Написанный метод конвертирует числа правильно, но, может, есть способы улучшить код, или сделать более компактным?
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "101010111";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
}
public static String toHex(String binaryNumber) {
if (binaryNumber == null) {
return null;
}
while (binaryNumber.length() % 4 != 0) {
StringBuilder builder = new StringBuilder(binaryNumber);
builder = builder.insert(0, "0");
binaryNumber = builder.toString();
}
int length = binaryNumber.length();
String hexNumber = "";
int start = 0, end = 4;
while (length > 0) {
int indexHex = 0;
String sub = binaryNumber.substring(start, end);
for (int i = 0; i < sub.length(); i++) {
indexHex += ((int) (Math.pow(2, i)) * (Character.getNumericValue(sub.charAt(sub.length() - i - 1))));
}
hexNumber += HEX.charAt(indexHex % 16);
start += 4;
end += 4;
length -= 4;
}
return hexNumber;
}
Anonymous #2988619
39 уровень
Нужен совет более опытных коллег
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
AV
20 февраля 2022, 13:26
Это была хорошая задача. Пришлось прочитать лекции 10 уровня до конца, до StringBuilder. Потом вернулся и сделал без него, с простыми String. Сделал просто, почти как в правильном ответе.
0
Justinian Judge в Mega City One Master
14 февраля 2022, 12:03
очень хорошо, что ты понимаешь, что улучшение кода и сделать его компактным - это разные вещи.
Очень часто, сделать код лучше = сделать его больше по объему.
Код как код, для данной задачи и твоего уровня более чем достаточно.
Я бы придрался только к int start = 0, end = 4; в одной строке переменные не объявляют, но для алгоритмической по сути задачи..пойдет.
Если интересно какие еще варианты решения, можешь посмотреть Обсуждение задачи и комменты , можешь погуглить (на английском) будет много идей и материалов, это если интересно поискать еще способы.
Учитывая тот объем информации и практических заданий, которые ожидают тебя впереди, циклиться на этом задании лично я бы не советовал, но если есть интерес разобрать еще варианты - используй вышеуказанные источники.
0