import java.io.*; import java.util.StringTokenizer; import java.lang.Integer; class test1{ public static void main(String[] args) throws IOException{ String roman=""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("\nEnter the roman numeral: "); try { roman = br.readLine(); }catch (IOException ioe) { System.out.println("Error reading the roman numeral"); System.exit(1); } try { System.out.println(deromanize(roman)); } catch (NumberFormatException e) { System.out.println("Invalid input."); System.exit(1); } System.out.println("\n\nGG"); } // deromanize(string) // takes a roman numeral returns a number public static int deromanize(String roman) { if (roman.length() == 0) throw new NumberFormatException("An empty string is not quite a Roman numeral."); roman = roman.toUpperCase(); int i=0, arabic=0, num=0; while (i < roman.length()) { char letter = roman.charAt(i); int number = numberizer(letter); if (number < 0) throw new NumberFormatException("Illegal character \"" + letter + "\" in roman numeral."); i++; if (i == roman.length()) { arabic += number; } else { int nextNumber = numberizer(roman.charAt(i)); if (nextNumber > number) { arabic += (nextNumber - number); i++; } else { arabic += number; } } } if (arabic > 3999) throw new NumberFormatException("Numeral must be less than or equal to 3999...sorry."); num = arabic; return num; } // end of deromanize public static int numberizer(char letter) { // Find the integer value of letter considered as a Roman numeral. Return // -1 if letter is not a legal Roman numeral. The letter must be upper case. switch (letter) { case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: return -1; } }//end of numberizer }