Seems ok, all my tests passed, but verification failed.
package com.codegym.task.task30.task3001;
import java.util.Arrays;
/*
Numeral system converter
*/
public class Solution {
public static void main(String[] args) {
Number number = new Number(NumberSystemType._10, "6");
Number result = convertNumberToOtherNumberSystem(number, NumberSystemType._2);
System.out.println(result); // 110 expected
number = new Number(NumberSystemType._16, "6df");
result = convertNumberToOtherNumberSystem(number, NumberSystemType._10);
System.out.println(result);
number = new Number(NumberSystemType._16, "6df");
result = convertNumberToOtherNumberSystem(number, NumberSystemType._8);
System.out.println(result); // 3337 expected
number = new Number(NumberSystemType._16, "abcdefabcdef");
result = convertNumberToOtherNumberSystem(number, NumberSystemType._16);
System.out.println(result); // abcdefabcdef expected
}
public static Number convertNumberToOtherNumberSystem(Number number, NumberSystem expectedNumberSystem) {
//write your code here
final char[] digits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
for (char digit : number.getDigit().toUpperCase().toCharArray()) {
if (Arrays.binarySearch(digits, digit) < 0 || Arrays.binarySearch(digits, digit) >= number.getNumberSystem().getNumberSystemIntValue())
throw new NumberFormatException();
}
if (number.getDigit().length() == 0)
return new Number(expectedNumberSystem, "");
long base = 1;
long decimalValue = 0;
for(int i = number.getDigit().length() - 1; i >= 0; i--) {
decimalValue += Arrays.binarySearch(digits, number.getDigit().toUpperCase().charAt(i)) * base;
base *= number.getNumberSystem().getNumberSystemIntValue();
}
StringBuilder resultValue = new StringBuilder();
while (decimalValue > 0) {
resultValue.append(digits[(int)(decimalValue % expectedNumberSystem.getNumberSystemIntValue())]);
decimalValue /= expectedNumberSystem.getNumberSystemIntValue();
}
return new Number(expectedNumberSystem, resultValue.reverse().toString().toLowerCase());
}
}