// Program: Convert from binary (decimal) to roman numerals.
// This is the model without any user interface.
// Author : Fred Swartz
// Date : 23 Jan 2006
package fna.charactermarkup;
public class RomanConversion {
// Parallel arrays used in the conversion process.
private static final String[] RCODE = {"M", "CM", "D", "CD", "C", "XC", "L",
"XL", "X", "IX", "V", "IV", "I"};
private static final int[] BVAL = {1000, 900, 500, 400, 100, 90, 50,
40, 10, 9, 5, 4, 1};
//=========================================================== binaryToRoman
public static String binaryToRoman(int binary) {
if (binary <= 0 || binary >= 4000) {
throw new NumberFormatException("Value outside roman numeral range.");
}
String roman = ""; // Roman notation will be accumualated here.
// Loop from biggest value to smallest, successively subtracting,
// from the binary value while adding to the roman representation.
for (int i = 0; i < RCODE.length; i++) {
while (binary >= BVAL[i]) {
binary -= BVAL[i];
roman += RCODE[i];
}
}
return roman;
}
}