LeetCode 13. Roman to Integer

来源:互联网 发布:软件测试工程师要求 编辑:程序博客网 时间:2024/05/16 01:16

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;}


0 0
原创粉丝点击