Метод 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; }