From 3e6c84753e33fb038430e60a827f496914e99a2b Mon Sep 17 00:00:00 2001 From: aru0205shi <72613542+aru0205shi@users.noreply.github.com> Date: Sun, 11 Oct 2020 12:22:30 +0530 Subject: [PATCH] Add files via upload --- RomanToDecimal.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 RomanToDecimal.cpp diff --git a/RomanToDecimal.cpp b/RomanToDecimal.cpp new file mode 100644 index 0000000..44527a0 --- /dev/null +++ b/RomanToDecimal.cpp @@ -0,0 +1,72 @@ +#include +using namespace std; + +// This function returns value +// of a Roman symbol +int value(char r) +{ + if (r == 'I') + return 1; + if (r == 'V') + return 5; + if (r == 'X') + return 10; + if (r == 'L') + return 50; + if (r == 'C') + return 100; + if (r == 'D') + return 500; + if (r == 'M') + return 1000; + + return -1; +} + +// Returns decimal value of +// roman numaral +int romanToDecimal(string& str) +{ + // Initialize result + int res = 0; + + // Traverse given input + for (int i = 0; i < str.length(); i++) { + // Getting value of symbol s[i] + int s1 = value(str[i]); + + if (i + 1 < str.length()) { + // Getting value of symbol s[i+1] + int s2 = value(str[i + 1]); + + // Comparing both values + if (s1 >= s2) { + // Value of current symbol + // is greater or equal to + // the next symbol + res = res + s1; + } + else { + // Value of current symbol is + // less than the next symbol + res = res + s2 - s1; + i++; + } + } + else { + res = res + s1; + } + } + return res; +} + +// Driver Program +int main() +{ + // Considering inputs given are valid + string str = "MCMIV"; + cout << "Integer form of Roman Numeral is " + << romanToDecimal(str) << endl; + + return 0; +} \ No newline at end of file