Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
According to the definition. Roman to integer should be:
- 1. A letter repeats its value that many times (XXX = 30, CC = 200, etc.). A letter can only be repeated three times.
- 2. If one or more letters are placed after another letter of greater value, add that amount.
VI = 6 (5 + 1 = 6)
LXX = 70 (50 + 10 + 10 = 70)
MCC = 1200 (1000 + 100 + 100 = 1200)
3. If a letter is placed before another letter of greater value, subtract that amount.IV = 4 (5 – 1 = 4)
XC = 90 (100 – 10 = 90)
CM = 900 (1000 – 100 = 900)
// Assume the input Romans are valid.
#include <string>
#include <iostream>
using namespace std;
int to_integer(char a) {
int res;
switch(a) {
case 'I': res = 1; break;
case 'V': res = 5; break;
case 'X': res = 10; break;
case 'L': res = 50; break;
case 'C': res = 100; break;
case 'D': res = 500; break;
case 'M': res = 1000; break;
}
return res;
}
int romanToInteger(string s) {
if(s.size() == 0) return 0;
int i = 0;
int sum = 0;
while(i < s.size()) {
sum += to_integer(s[i]);
if(i > 0 && (to_integer(s[i]) > to_integer(s[i-1])))
sum -= 2 * to_integer(s[i - 1]);
i++;
}
return sum;
}
int main(void) {
cout << romanToInteger("DCXXI") << endl;
}
本文介绍了一种将罗马数字转换为整数的方法。通过解析罗马数字的构成规则,包括重复字母表示的数值累加、小数值置于大数值之后的累加原则及小数值位于大数值之前的减法规则。文章提供了一个C++实现示例,展示了如何根据这些规则来计算罗马数字的实际数值。
666

被折叠的 条评论
为什么被折叠?



