Amazon Interview Question
Software Engineer / Developers<pre lang="" line="1" title="CodeMonkey56971" class="run-this">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;
}
}</pre><pre title="CodeMonkey56971" input="yes">class Main(String args[]) {
int number = 2468;
System.out.println(RomanConversion.binaryToRoman(number);
}</pre>
need to break down the input and then reassemble the output in roman numerals keeping in mind the subtraction rule....i first broke down the input and recorded how many 1000, 500, 100, 50, 10, 1 's i have....then i generate an intermediate output in roman form from that and then i look at the intermediate output and apply the subtraction rule using regular expressions to find consecutive characters that are equal and replace them....according to rule you cannot have more than 3 I's...have a look at the rules on wikipedia by searching for 'roman numerals'
- chrysalis November 20, 2007