diff options
author | crupest <crupest@outlook.com> | 2020-07-07 18:06:49 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-07-07 18:06:49 +0800 |
commit | b1feaf1985a5d8f2965239dafecce6bfeaf48c99 (patch) | |
tree | a446682591ce3c861651b8184b18a0a19b3fc564 /works/solutions/cpp/12.cpp | |
parent | 2a5d4b77c6fdd61e1533f6f654426cce9698bd84 (diff) | |
download | crupest-b1feaf1985a5d8f2965239dafecce6bfeaf48c99.tar.gz crupest-b1feaf1985a5d8f2965239dafecce6bfeaf48c99.tar.bz2 crupest-b1feaf1985a5d8f2965239dafecce6bfeaf48c99.zip |
import(solutions): Add problem 12.
Diffstat (limited to 'works/solutions/cpp/12.cpp')
-rw-r--r-- | works/solutions/cpp/12.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/works/solutions/cpp/12.cpp b/works/solutions/cpp/12.cpp new file mode 100644 index 0000000..68eb4b4 --- /dev/null +++ b/works/solutions/cpp/12.cpp @@ -0,0 +1,51 @@ +#include <string> + +using std::string; + +const char *roman_digits = "IVXLCDM"; + +class Solution +{ +public: + string intToRoman(int num) + { + string result; + + int current_digit_index = 0; + + while (num != 0) + { + const int digit = num % 10; + if (digit == 9) + { + result += roman_digits[current_digit_index + 2]; + result += roman_digits[current_digit_index]; + } + else if (digit <= 8 && digit >= 5) + { + for (int i = 0; i < digit - 5; i++) + { + result += roman_digits[current_digit_index]; + } + result += roman_digits[current_digit_index + 1]; + } + else if (digit == 4) + { + result += roman_digits[current_digit_index + 1]; + result += roman_digits[current_digit_index]; + } + else + { + for (int i = 0; i < digit; i++) + { + result += roman_digits[current_digit_index]; + } + } + + num /= 10; + current_digit_index += 2; + } + + return string(result.crbegin(), result.crend()); + } +};
\ No newline at end of file |