## Algorithm

Problem Name: 13. Roman to Integer

Roman numerals are represented by seven different symbols: `I`, `V`, `X`, `L`, `C`, `D` and `M`.

```Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000```

For example, `2` is written as `II` in Roman numeral, just two ones added together. `12` is written as `XII`, which is simply `X + II`. The number `27` is written as `XXVII`, which is `XX + V + II`.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not `IIII`. Instead, the number four is written as `IV`. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as `IX`. There are six instances where subtraction is used:

• `I` can be placed before `V` (5) and `X` (10) to make 4 and 9.
• `X` can be placed before `L` (50) and `C` (100) to make 40 and 90.
• `C` can be placed before `D` (500) and `M` (1000) to make 400 and 900.

Given a roman numeral, convert it to an integer.

Example 1:

```Input: s = "III"
Output: 3
Explanation: III = 3.
```

Example 2:

```Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.
```

Example 3:

```Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
```

Constraints:

• `1 <= s.length <= 15`
• `s` contains only the characters `('I', 'V', 'X', 'L', 'C', 'D', 'M')`.
• It is guaranteed that `s` is a valid roman numeral in the range `[1, 3999]`.

## Code Examples

### #1 Code Example with C Programming

```Code - C Programming```

``````
int romanToInt(char* s) {
int n = 0;
char c;

while (c = *s ++) {
switch (c) {
case 'I':
if (*s == 'V') {
n += 4;
s ++;
} else if (*s == 'X') {
n += 9;
s ++;
} else {
n += 1;
}
break;
case 'V':
n += 5;
break;
case 'X':
if (*s == 'L') {
n += 40;
s ++;
} else if (*s == 'C') {
n += 90;

} else {
n += 10;
}
break;
case 'L':
n += 50;
break;
case 'C':
if (*s == 'D') {
n += 400;
s ++;
} else if (*s == 'M') {
n += 900;
s ++;
} else {
n += 100;
}
break;
case 'D':
n += 500;
break;
case 'M':
n += 1000;
break;
default:
break;
}
}

return n;
}
``````
Copy The Code &

Input

cmd
s = "III"

Output

cmd
3

### #2 Code Example with C++ Programming

```Code - C++ Programming```

``````
class Solution {
public:
int romanToInt(string s) {

unordered_mapm({{'I',1}, {'X',10}, {'C',100}, {'M',1000}, {'V',5}, {'L',50}, {'D',500}});
if(s.size() == 0) return 0;
int sum = m[s[s.size() - 1]];
for(int i = s.size() - 2; i >= 0; i--){
if(m[s[i]] >= m[s[i + 1]]) sum += m[s[i]];
else sum -= m[s[i]];
}
return sum;
}
};
``````
Copy The Code &

Input

cmd
s = "LVIII"

Output

cmd
58

### #3 Code Example with Java Programming

```Code - Java Programming```

``````
map = new HashMap<>();
for (int i = 0; i  <  strings.length; i++) {
map.put(strings[i], value[i]);
}
int idx = 0;
int num = 0;
while (idx  <  s.length()) {
if (idx + 1 < s.length() && map.containsKey(s.substring(idx, idx + 2))) {
num += map.get(s.substring(idx, idx + 2));
idx += 2;
} else {
num += map.get(s.substring(idx, idx + 1));
idx++;
}
}
return num;
}
}
``````
Copy The Code &

Input

cmd
s = "III"

Output

cmd
3

### #4 Code Example with Javascript Programming

```Code - Javascript Programming```

``````
const romanToInt = function(s) {
let res = 0
for (let i = s.length - 1; i >= 0; i--) {
let c = s.charAt(i)
switch (c) {
case 'I':
res += res >= 5 ? -1 : 1
break
case 'V':
res += 5
break
case 'X':
res += 10 * (res >= 50 ? -1 : 1)
break
case 'L':
res += 50
break
case 'C':
res += 100 * (res >= 500 ? -1 : 1)
break
case 'D':
res += 500
break
case 'M':
res += 1000
break
}
}
return res
}
``````
Copy The Code &

Input

cmd
s = "LVIII"

Output

cmd
58

### #5 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def intToRoman(self, num):
s = "M" * (num // 1000)
s += "CM" if num % 1000 >= 900 else "D" *((num % 1000) // 500)
s += "CD" if num % 500 >= 400 and s[-2:] != "CM" else "C" * ((num % 500) // 100)  if num % 500 < 400 else ""
s += "XC" if num % 100 >= 90 else "L" * ((num % 100) // 50)
s += "XL" if num % 50 >= 40 and s[-2:] != "XC" else "X" * ((num % 50) // 10)  if num % 50 < 40 else ""
s += "IX" if num % 10 >= 9 else "V" * ((num % 10) // 5)
s += "IV" if num % 5 >= 4 and s[-2:] != "IX" else "I" * ((num % 5) // 1) if num % 5 < 4 else ""
return s
``````
Copy The Code &

Input

cmd
s = "III"

Output

cmd
3

### #6 Code Example with C# Programming

```Code - C# Programming```

``````
namespace LeetCode
{
public class _013_RomanToInteger
{
int Mapping(char ch)
{
switch (ch)
{
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;
default: return 0;
}
}

public int RomanToInt(string s)
{
var result = 0;
for (int i = 0; i  <  s.Length; i++)
{
if (i > 0 && Mapping(s[i]) > Mapping(s[i - 1]))
{
result += Mapping(s[i]) - Mapping(s[i - 1]) * 2;
}
else
{
result += Mapping(s[i]);
}
}

return result;
}
}
}
``````
Copy The Code &

Input

cmd
s = "LVIII"

Output

cmd
58