-
Notifications
You must be signed in to change notification settings - Fork 0
/
RomanToArabicConverter.java
113 lines (108 loc) · 4.79 KB
/
RomanToArabicConverter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//package blip.challenges;
public class RomanToArabicConverter {
int sum = 0;
// Read just the first element of the String, because in the switch statement
// there is the substring method
// which in case the string read in this recursive function achieves the end, it
// will activate an exception
// (charAt cannot read anything that is not a char, which in case the string
// finishes it cannot read anything:
// is going to trigger that exception)
public int convertRomanToArabic(final String romanNumber) {
if (romanNumber.length() == 1) {
switch (romanNumber) {
case "M":
return sum += 1000;
case "D":
return sum += 500;
case "C":
return sum += 100;
case "L":
return sum += 50;
case "X":
return sum += 10;
case "I":
return sum += 1;
}
} else {
if (romanNumber.isEmpty() == true) {
return sum += 0;
}
switch (romanNumber.charAt(0)) {// Read as char just the first charater of the romanNumber String
// Start with C because
case 'C':
if (romanNumber.charAt(1) == 'M') {// CM
sum += 900;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else if (romanNumber.charAt(1) == 'D') {// CD
sum += 400;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else {
sum += 100;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(1)));
}
break;
case 'M':
sum += 1000;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(1)));
break;
case 'D':
if (romanNumber.charAt(1) == 'C') {
sum += 600;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else {
sum += 500;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(1)));
}
break;
case 'L':
if (romanNumber.charAt(1) == 'X') {
sum += 60;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else {
sum += 50;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(1)));
}
break;
case 'X':
if (romanNumber.charAt(1) == 'C') {
sum += 90;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else if (romanNumber.charAt(1) == 'L') {
sum += 40;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else {
sum += 10;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(1)));
}
break;
case 'I':
if (romanNumber.charAt(1) == 'X') {
sum += 9;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else if (romanNumber.charAt(1) == 'V') {
sum += 4;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(2)));
} else {
sum += 1;
sum = convertRomanToArabic(String.valueOf(romanNumber.substring(1)));
}
break;
case 'V':
sum += 5;
sum = convertRomanToArabic(romanNumber.substring(1));
break;
}
}
return sum;
}
// Driver Code
public static void main(String[] args) {
RomanToArabicConverter rta = new RomanToArabicConverter();
System.out.print("Conversion result to roman: " + rta.convertRomanToArabic("DXXI")); // 521
rta.sum = 0;
System.out.printf("%n");
System.out.print("Conversion result to roman: " + rta.convertRomanToArabic("MMMCMLXXXIX")); // 3989
System.out.printf("%n");
}
}