当前位置: 面试刷题>> 罗马数字转整数 (经典算法题500道)
### 题目描述
罗马数字是古罗马使用的一种数字系统,它采用不同符号来表示不同的数值,相同的符号因位置不同可能表示不同的数,例如 I=1, V=5, X=10, L=50, C=100, D=500, M=1000。一个罗马数字通常由这些符号的序列组成,例如 "III" 表示 3,"IV" 表示 4,"VI" 表示 6,"MCMXCIV" 表示 1994。罗马数字的特点是:
- 当一个符号在另一个符号的左边并且小于它时,表示两个数相加,如 "IV"=4,"VI"=6。
- 当一个符号在另一个符号的左边并且不小于它时,表示右边的数要减去左边的数,如 "IV"=5-1=4,"IX"=10-1=9。
给定一个罗马数字字符串,将其转换成整数。
### 示例
- 输入:"III"
- 输出:3
- 输入:"IV"
- 输出:4
- 输入:"IX"
- 输出:9
- 输入:"LVIII"
- 输出:58
- 输入:"MCMXCIV"
- 输出:1994
### PHP 示例代码
```php
function romanToInt($s) {
$map = [
'I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000,
];
$total = 0;
$prev = 0;
$length = strlen($s);
for ($i = $length - 1; $i >= 0; $i--) {
$value = $map[$s[$i]];
if ($value < $prev) {
$total -= $value;
} else {
$total += $value;
}
$prev = $value;
}
return $total;
}
// 测试
echo romanToInt("III"); // 输出 3
echo romanToInt("IV"); // 输出 4
```
### Python 示例代码
```python
def romanToInt(s: str) -> int:
roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
total = 0
prev = 0
for char in reversed(s):
value = roman_map[char]
if value < prev:
total -= value
else:
total += value
prev = value
return total
# 测试
print(romanToInt("III")) # 输出 3
print(romanToInt("IV")) # 输出 4
```
### JavaScript 示例代码
```javascript
function romanToInt(s) {
const romanMap = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
};
let total = 0;
let prev = 0;
for (let i = s.length - 1; i >= 0; i--) {
const value = romanMap[s[i]];
if (value < prev) {
total -= value;
} else {
total += value;
}
prev = value;
}
return total;
}
// 测试
console.log(romanToInt("III")); // 输出 3
console.log(romanToInt("IV")); // 输出 4
```
**码小课网站中有更多相关内容分享给大家学习**,包括但不限于算法、数据结构、编程语言进阶等内容,帮助大家更好地提升编程能力。