Разное

Перевод числа из одной системы счисления в другую Java

Перевод числа из одной системы счисления в другую

public class Solution {
public static void main(String[] args) {
Number number = new Number(NumerationSystemType._10, "6");
Number result = convertNumberToOtherNumerationSystem(number, NumerationSystemType._2);
System.out.println(result); //expected 110

number = new Number(NumerationSystemType._16, "6df");
result = convertNumberToOtherNumerationSystem(number, NumerationSystemType._8);
System.out.println(result); //expected 3337

number = new Number(NumerationSystemType._16, "abcdefabcdef");
result = convertNumberToOtherNumerationSystem(number, NumerationSystemType._16);
System.out.println(result); //expected abcdefabcdef
}
public static Number convertNumberToOtherNumerationSystem(Number number, NumerationSystem expectedNumerationSystem) {
Number result = null;
int system = number.getNumerationSystem().getNumerationSystemIntValue();

try {
String strNum = "" + new BigInteger(number.getDigit(), system);
BigInteger a= new BigInteger(strNum);
String s = a.toString(expectedNumerationSystem.getNumerationSystemIntValue());
result = new Number(expectedNumerationSystem, s);

} catch (Exception e){
throw new NumberFormatException();
}
return result;
}
}

Основной код по переводу чисел выделен жирным шрифтом.

Класс Number:

public class Number {
private NumerationSystem numerationSystem;
private String digit;

public Number(NumerationSystem numerationSystem, String digit) {
this.numerationSystem = numerationSystem;
this.digit = digit;
}

public NumerationSystem getNumerationSystem() {
return numerationSystem;
}

public String getDigit() {
return digit;
}

@Override
public String toString() {
return "Number{" +
"numerationSystem=" + numerationSystem +
", digit='" + digit + '\'' +
'}';
}
}

Enum NumerationSystemType:

public enum NumerationSystemType implements NumerationSystem {
_16,
_12,
_10,
_9,
_8,
_7,
_6,
_5,
_4,
_3,
_2;

@Override
public int getNumerationSystemIntValue() {
return Integer.parseInt(this.name().substring(1));
}
}

Интерфейс NumerationSystem

public interface NumerationSystem {
int getNumerationSystemIntValue();
}



сайт на Bitrix

Территориально я нахожусь в Санкт-Петербурге, но могу и готова работать со всеми, вне зависимости от вашего местоположения. Вы можете написать мне через форму обратной связи, либо связаться через социальные сети. Ознакомиться с портфолио можно здесь и здесь.

Социальные сети

Рандом новостей