diff options
| author | crupest <crupest@outlook.com> | 2020-07-07 18:24:08 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-07-07 18:24:08 +0800 | 
| commit | 9c592f8539dd5550da7dc6cfc7638697e2acf684 (patch) | |
| tree | 3447ad3f6df70ad7e17019a9b791f797edbf8101 /works/solutions/cpp | |
| parent | b1feaf1985a5d8f2965239dafecce6bfeaf48c99 (diff) | |
| download | crupest-9c592f8539dd5550da7dc6cfc7638697e2acf684.tar.gz crupest-9c592f8539dd5550da7dc6cfc7638697e2acf684.tar.bz2 crupest-9c592f8539dd5550da7dc6cfc7638697e2acf684.zip | |
import(solutions): Add problem 13.
Diffstat (limited to 'works/solutions/cpp')
| -rw-r--r-- | works/solutions/cpp/13.cpp | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/works/solutions/cpp/13.cpp b/works/solutions/cpp/13.cpp new file mode 100644 index 0000000..486c01b --- /dev/null +++ b/works/solutions/cpp/13.cpp @@ -0,0 +1,54 @@ +#include <string> + +using std::string; + +int romanDigitNumber(char romanDigit) +{ +    switch (romanDigit) +    { +    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; +    }; +    return 0; +} + +class Solution +{ +public: +    int romanToInt(string s) +    { +        int result = 0; + +        int count = s.size(); + +        for (int i = 0; i < count; i++) +        { +            const char c = s[i]; +            int num = romanDigitNumber(c); +            if (i < count - 1) +            { +                const char next = s[i + 1]; +                if ((c == 'I' && (next == 'V' || next == 'X')) || (c == 'X' && (next == 'L' || next == 'C')) || (c == 'C') && (next == 'D' || next == 'M')) +                { +                    num = -num; +                } +            } + +            result += num; +        } + +        return result; +    } +}; | 
