Уже писали об этом, но ответа не было. Валидатор говорит что программа выполняется долго. Это как то лечится? Или нужно определенным образом переписать код?
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
String binaryNumber = "100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber)
{
if (binaryNumber == null || binaryNumber.equals(""))
{
return "";
}
for (int i = 0; i < binaryNumber.length(); i++) {
if (binaryNumber.charAt(i) != '1' && binaryNumber.charAt(i) != '0')
{
return "";
}
}
int decimalresult = 0;
if ((binaryNumber.length()>0))
{
for (int i = 0; i < binaryNumber.length(); i++)
{
decimalresult += (int) (binaryNumber.charAt(i) == '1' ? Math.pow(2, binaryNumber.length() - i - 1) : 0);
}
}
String hexString ="";
String BufString = "";
int bufInt =0;
while (decimalresult >= 1)
{
bufInt = decimalresult % 16;
switch (bufInt) {
case 0:
BufString = "0";
break;
case 1:
BufString = "1";
break;
case 2:
BufString = "2";
break;
case 3:
BufString = "3";
break;
case 4:
BufString = "4";
break;
case 5:
BufString = "5";
break;
case 6:
BufString = "6";
break;
case 7:
BufString = "7";
break;
case 8:
BufString = "8";
break;
case 9:
BufString = "9";
break;
case 10:
BufString = "a";
break;
case 11:
BufString = "b";
break;
case 12:
BufString = "c";
break;
case 13:
BufString = "d";
break;
case 14:
BufString = "e";
break;
case 15:
BufString = "f";
break;
}
hexString = BufString + hexString;
decimalresult = decimalresult / 16;
}
//напишите тут ваш код
return hexString;
}
public static String toBinary(String hexNumber) {
String arrHexNum = "0123456789abcdef";
if (hexNumber == null || hexNumber.equals(""))
{
return "";
}
int N = 0;
for (int i = 0; i < hexNumber.length(); i++)
{
N = 0;
for (int j = 0; j < 16; j++) {
if (N == 15 && (hexNumber.charAt(i) != arrHexNum.charAt(j)))
{
return "";
}
if (N < 16 && (hexNumber.charAt(i) == arrHexNum.charAt(j)))
{
break;
}
N++;
}
}
int result = 0;
int bufInt = 0;
char[] charArray = new char[hexNumber.length()];
charArray = hexNumber.toCharArray();
for (int i = 0; i < hexNumber.length(); i++) {
if (charArray[i] == 'a' || charArray[i] == 'b' || charArray[i] == 'c' || charArray[i] == 'd' || charArray[i] == 'e' || charArray[i] == 'f') {
switch (charArray[i]) {
case 'a':
bufInt = 10;
break;
case 'b':
bufInt = 11;
break;
case 'c':
bufInt = 12;
break;
case 'd':
bufInt = 13;
break;
case 'e':
bufInt = 14;
break;
case 'f':
bufInt = 15;
break;
}
} else {
bufInt = Character.getNumericValue(charArray[i]);
}
result += (int) (bufInt * Math.pow(16, hexNumber.length() - 1 - i));
}
String binString ="";
int i=0;
while (result >= 0)
{
binString = result%2 + binString;
result = result/2;
if (result ==0 )
{
break;
}
}
if (binString.length()%4 != 0) {
for (int j = 0; j < binString.length()%4; j++) {
binString = "0"+binString;
}
}
//напишите тут ваш код
return binString;
}
}