У меня было интервью, в котором я ужасно выступил. Итак, сейчас я пытаюсь найти решение вопроса. Вот вопрос для интервью:
"У нас есть следующее сопоставление:
M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1.
И у нас есть следующие правила:
Каждая буква соответствует положительному целочисленному значению
Вы складываете значения вместе, кроме ...
... когда за значением (или сериями тех же значений) следует большее значение, вы вычитаете сумму этого ряда значений.
Примеры:
IIX -> 8
MCCMIIX -> 1808 г.
Нам дан этот Java-метод: int valueOfRoman(char roman)
. Мы реализовали метод Java: int romanToInt(String s)
"
Я знаю, что это неправильная римская система счисления, но вопрос именно в этом.
Я смог написать рабочее решение для правильной римской системы. Но я не могу изменить его так, чтобы он адаптировался к этим новым правилам, в частности к Правилу 3. Я пробовал, но безуспешно. Каково мое решение прямо сейчас, для IIX оно выводит 10 вместо правильного ответа 8. Вот мой код (я также реализовал valueOf
для своего тестирования):
static int romanToInt(String s) {
char curr;
int currVal;
char prev;
int prevVal;
int total = valueOfRoman(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
curr = s.charAt(i);
currVal = valueOfRoman(curr);
prev = s.charAt(i-1);
prevVal = valueOfRoman(prev);
total += currVal;
if(currVal > prevVal) {
total = total - (2*prevVal);
}
}
return total;
}
static int valueOfRoman(char c) {
if (c == 'M') {
return 1000;
} else if (c == 'D') {
return 500;
} else if (c == 'C') {
return 100;
} else if (c == 'L') {
return 50;
} else if (c == 'X') {
return 10;
} else if (c == 'V') {
return 5;
} else if (c == 'I') {
return 1;
}
return -1;
}
Любая помощь действительно приветствуется. Особенно полезно будет, если вы скажете мне, как изменить мой код. Спасибо!
РЕДАКТИРОВАТЬ: Я отредактировал названия методов, чтобы они были более понятными.