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 | 1f6f853365695d8e3c5cf1d897122859ad61885d (patch) | |
tree | ad147288c34b9e6eae7a4ca443a519b75df38b5e | |
parent | 9b6cb39e1dc15221e011e69925676355521cf353 (diff) | |
download | solutions-1f6f853365695d8e3c5cf1d897122859ad61885d.tar.gz solutions-1f6f853365695d8e3c5cf1d897122859ad61885d.tar.bz2 solutions-1f6f853365695d8e3c5cf1d897122859ad61885d.zip |
Add problem 13.
-rw-r--r-- | cpp/13.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/cpp/13.cpp b/cpp/13.cpp new file mode 100644 index 0000000..486c01b --- /dev/null +++ b/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; + } +}; |