import java.util.Scanner;
public class BinaryToHex {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a binary string: ");
String b = input.nextLine();
for (int i = 0; i < b.length(); i++) {
if (!Character.isDigit(b.charAt(i)) || b.charAt(i) > '1') {
System.out.println("The string must be 0 or 1: ");
System.exit(0);
}
}
String hex = binaryToHex(b);
System.out.println(hex);
}
public static String binaryToHex(String b) {
int decimalValue = 0;
StringBuilder stringBuilder = new StringBuilder();
int splits;
if (b.length() % 4 == 0)
splits = 4;
else
splits = b.length() % 4;
for (int i = 0; i < splits && splits <= b.length(); i++) {
decimalValue = decimalValue * 2 + toDecimal(b.charAt(i));
if (i == splits - 1) {
if (decimalValue >= 10) {
char[] ch = decimalToHex(decimalValue);
stringBuilder.append(ch);
} else
stringBuilder.append(decimalValue);
decimalValue = 0;
splits += 4;
}
}
return stringBuilder.toString();
}
public static int toDecimal(char ch) {
return ch - 48;
}
public static char[] decimalToHex(int val) {
char[] ch = new char[1];
ch[0] = (char) (val - 10 + 'A');
return ch;
}
}