Fiz essa pequena classe ArabicoToRomano.. há principio está respondendo..
Classe Teste/**
*
* @author Andy11x
*/
public class Teste {
public static void main(String[] args) {
//A entrada deve estar na escala de 1 - 4999
int[] arabico = {1, 3, 7, 67, 588, 1359, 2779, 3879, 4999};
for(int n : arabico){
System.out.println(new ArabicoToRomano(n));
}
}
}
/**
*
* @author Andy11x
*/
public class ArabicoToRomano {
private int numeroArabico;
public ArabicoToRomano() {
}
public ArabicoToRomano(int numeroArabico) {
this.numeroArabico = numeroArabico;
}
private String convertM() {
return "MMMM".substring(0, (int)(numeroArabico / 1000));
}
private String convertD() {
int n = digito(1000, 100);
return n == 9 ? "CM" :
n > 4 ? "DCCC".substring(0, n - 4) :
n == 4 ? "CD" : "CCC".substring(0, n);
}
private String convertX() {
int n = digito(100, 10);
return n == 9 ? "XC" :
n > 4 ? "LXXX".substring(0, n - 4) :
n == 4 ? "XL" : "XXX".substring(0, n);
}
private String convertI() {
int n = digito(10, 1);
return n == 9 ? "IX" :
n > 4 ? "VIII".substring(0, n - 4) :
n == 4 ? "IV" : "III".substring(0, n);
}
private int digito(int divA, int divB) {
return (int)((numeroArabico % divA) / divB);
}
public void setNumeroArabico(int numeroArabico) {
this.numeroArabico = numeroArabico;
}
@Override
public String toString() {
return new StringBuilder()
.append(convertM())
.append(convertD())
.append(convertX())
.append(convertI()).toString();
}
}