package com.javarush.task.pro.task09.task0908;
/*
Двоично-шестнадцатеричный конвертер
*/
import java.util.regex.Pattern;
public class Solution {
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "0";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "000";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
if (binaryNumber == null || binaryNumber.equals("") || !isBin(binaryNumber)) return "";
for (int i = 0; i < (binaryNumber.length() % 4); i++) {
binaryNumber = "0" + binaryNumber;
}
if (binaryNumber.equals("0000")) return "0";
return decToHex(binToDecimal(binaryNumber));
}
public static String toBinary(String hexNumber) {
if (hexNumber == null || hexNumber.equals("") || !isHex(hexNumber)) return "";
if (hexNumber.equals("0")) return "0";
return decToBinary(hexToDecimal(hexNumber));
}
public static int binToDecimal(String binaryNumber) {
int num = 0, n = 0;
if (binaryNumber == null || binaryNumber.equals("")) return 0;
for (int i = 0; i < binaryNumber.length(); i++) {
n = binaryNumber.charAt(binaryNumber.length() - i - 1) == '1' ? (int) Math.pow(2, i) : 0;
num = num + n;
}
return num;
}
public static String decToBinary(int decimalNumber) {
String bin_str = "";
if (decimalNumber == 0) return "0";
while (decimalNumber > 0) {
bin_str = String.valueOf((decimalNumber % 2)) + bin_str;
decimalNumber = decimalNumber / 2;
}
return bin_str;
}
public static String decToHex(int decimalNumber) {
//напишите тут ваш код
String hex_num = "";
if (decimalNumber == 0) return "0";
while (decimalNumber != 0) {
hex_num = HEX.charAt(decimalNumber % 16) + hex_num;
decimalNumber = decimalNumber / 16;
}
return hex_num;
}
public static int hexToDecimal(String hexNumber) {
if (hexNumber == null || hexNumber.equals("")) return -1;
int index = 0;
int num = 0;
for (int i = 0; i < hexNumber.length(); i++) {
for (int j = 0; j < HEX.length(); j++) {
if (hexNumber.charAt(hexNumber.length() - i - 1) == HEX.charAt(j)) {
index = j;
break;
}
}
num = num + index * (int) Math.pow(16, i);
}
return num;
}
public static boolean isBin(String binNumber) {
int n = 0;
for (int i = 0; i < binNumber.length(); i++) {
n = (int) binNumber.charAt(i);
if (n < 48 || n > 49) return false;
}
return true;
}
public static boolean isHex(String hexNumber) {
int n = 0;
for (int i = 0; i < hexNumber.length(); i++) {
n = (int) hexNumber.charAt(i);
if (!((n >= 48 && n <= 57) || (n >= 97 && n <= 102))) return false;
}
return true;
}
}
Нурмагомед Нурмагомедов
17 уровень
Не проходит проверку функция toBinary(String), хотя я все проверил. Help
Решен
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел Безумный учёный Expert
18 октября 2021, 17:33
Из-за промежуточной конвертации в десятичное значение и преобразование его в тип int алгоритм имеет ограничение: конвертируемое значение будет корректно обработано, если оно не первышает Integer.MAX_VALUE. В этом, на мой взгляд, кроектся причина ошибки валидации. Например, двоичное значение "111111111111111111111111111111111111" должно быть преобразовано в "fffffffff", и наоборот.
0
Нурмагомед Нурмагомедов
19 октября 2021, 11:27
Согласен .... но в задании не оговорено максимальное число
0
Нурмагомед Нурмагомедов
18 октября 2021, 16:56
бесит эта задача
0
Ksenia Volkova Java Developer в DXC Master
18 октября 2021, 15:01
Для 0 тоже должен быть результат.
0
Нурмагомед Нурмагомедов
18 октября 2021, 15:08
😬 Спасибо большое!
0
Нурмагомед Нурмагомедов
18 октября 2021, 15:13
Боюсь это не помогло
0
Ksenia Volkova Java Developer в DXC Master
18 октября 2021, 15:35
Одного "0" достаточно. Ты же не возвращаешь 0001 для числа 1.
0
Нурмагомед Нурмагомедов
18 октября 2021, 15:37
в любом случае не проходит проверку. добавил нули для красоты
0
Нурмагомед Нурмагомедов
18 октября 2021, 15:38
исправил
0
Ksenia Volkova Java Developer в DXC Master
18 октября 2021, 16:17
Не знаю, что именно не нравится валидатору, но мне бы не понравилось такое поведение:
0
Нурмагомед Нурмагомедов
18 октября 2021, 16:36
баг на баге ... но и это не помогло
0