Почему не проходит решение? Вывод соответствует нужному.
package com.javarush.task.task30.task3001;
import java.math.BigInteger;
/*
Конвертер систем счислений
*/
public class Solution {
public static void main(String[] args) {
//Number number = new Number(NumberSystemType._3, "10232");
//NumberSystemType expectedNotationType = NumberSystemType._16;
Number number = new Number(NumberSystemType._10, "6");
NumberSystemType expectedNotationType = NumberSystemType._2;
Number result = convertNumberToOtherNumberSystem(number, expectedNotationType);
System.out.println(result); //expected 110
number = new Number(NumberSystemType._16, "6df");
expectedNotationType = NumberSystemType._8;
result = convertNumberToOtherNumberSystem(number, expectedNotationType);
System.out.println(result); //expected 3337
number = new Number(NumberSystemType._16, "abcdefabcdef");
expectedNotationType = NumberSystemType._16;
result = convertNumberToOtherNumberSystem(number, expectedNotationType);
System.out.println(result); //expected abcdefabcdef
}
public static Number convertNumberToOtherNumberSystem(Number number, NumberSystem expectedNumberSystem) {
int multiplication;
String s = number.getDigit();
// //System.out.println("Число: " + s);
int l = s.length();
//System.out.println(number.getNumberSystem().toString().substring(1));
long mult = Long.parseLong(number.getNumberSystem().toString().substring(1));
// //System.out.println("Сиcтема: " + number.getNumberSystem().toString().substring(1));
// //System.out.println("Проверим, что переданное число корректное");
switch (number.getNumberSystem().toString()) {
case "_16":
if (!number.getDigit().toString().matches("[0123456789abcdef]*")) throw new NumberFormatException();
break;
case "_12":
if (!number.getDigit().toString().matches("[0123456789ab]*")) throw new NumberFormatException();
break;
case "_10":
if (!number.getDigit().toString().matches("[0123456789]*")) throw new NumberFormatException();
break;
case "_9":
if (!number.getDigit().toString().matches("[012345678]*")) throw new NumberFormatException();
break;
case "_8":
if (!number.getDigit().toString().matches("[01234567]*")) throw new NumberFormatException();
break;
case "_7":
if (!number.getDigit().toString().matches("[0123456]*")) throw new NumberFormatException();
break;
case "_6":
if (!number.getDigit().toString().matches("[012345]*")) throw new NumberFormatException();
break;
case "_5":
if (!number.getDigit().toString().matches("[01234]*")) throw new NumberFormatException();
break;
case "_4":
if (!number.getDigit().toString().matches("[0123]*")) throw new NumberFormatException();
break;
case "_3":
if (!number.getDigit().toString().matches("[012]*")) throw new NumberFormatException();
break;
case "_2":
if (!number.getDigit().toString().matches("[01]*")) throw new NumberFormatException();
break;
}
// Сначала переведем в десятичную
long value;
long loopMult;
Long result = 0L;
for (int i = 0; i < l; i++) {
loopMult = 1;
for (int j = 0; j < i; j++) {
loopMult = loopMult * mult;
}
// берем очередной символ
String symbol = s.substring(l - i - 1, l - i);
//System.out.println("Текущий символ: " + symbol);
switch (symbol) {
case "f":
value = 15;
break;
case "e":
value = 14;
break;
case "d":
value = 13;
break;
case "c":
value = 12;
break;
case "b":
value = 11;
break;
case "a":
value = 10;
break;
default:
value = Integer.parseInt(symbol);
break;
}
//System.out.println("Символ перевели в число: " + value);
//System.out.println("На что же домножаем: " + loopMult);
result += value * loopMult;
}
//System.out.println("Промежуточный результат в десятичной системе: " + result);
//System.out.println("Теперь промежуточный результат перефигачим в другую систему исчисления");
int newMult = Integer.parseInt(expectedNumberSystem.toString().substring(1));
//System.out.println("Новая система исчисления: " + newMult);
//System.out.println("Найдем максимальную степерь");
StringBuilder resBuilder = new StringBuilder("");
// Найдем количество цифр
long k = 0;
int z = 0;
int newDivisor = 0;
while (true) {
k = (long) Math.pow(newMult, z);
z++;
//System.out.println(k);
if (result / k == 0) break;
}
//System.out.println("Полученное количество цифр: " + --z);
long p;
for (int i = z - 2; i >= 0; i--) {
p = (long) Math.pow(newMult, i);
//System.out.println("Будем делить на: " + p);
long newDigit = result / p;
switch ((int) newDigit) {
case 15:
resBuilder.append("f");
break;
case 14:
resBuilder.append("e");
break;
case 13:
resBuilder.append("d");
break;
case 12:
resBuilder.append("c");
break;
case 11:
resBuilder.append("b");
break;
case 10:
resBuilder.append("a");
break;
default:
resBuilder.append(String.valueOf(newDigit));
break;
}
//System.out.println("Промежуточный результат строки: " + resBuilder.toString());
result = result - newDigit * p;
//System.out.println("Новая переменная для анализа: " + result);
}
return new Number(expectedNumberSystem, resBuilder.toString());
// return new Number(expectedNumberSystem, "");
}
}