当前位置: 面试刷题>> 整数转罗马数字(经典算法150题)
### 题目描述
编写一个函数,将给定的整数转换为罗马数字。罗马数字采用七个不同的符号:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000),这些符号可以重复使用以表示更大的数字,但也有一些规则限制其组合方式,如:
- I 可以放在 V 和 X 的左边,来表示 4 和 9。
- X 可以放在 L 和 C 的左边,来表示 40 和 90。
- C 可以放在 D 和 M 的左边,来表示 400 和 900。
- 同一数字符号最多只能连续使用三次(如:III, XXX, CCC)。
- 不能使用超过一个 M(1000)来表示数字。
给定一个整数,将其转换成罗马数字表示。
### 示例
输入: 3
输出: "III"
输入: 4
输出: "IV"
输入: 9
输出: "IX"
输入: 58
输出: "LVIII"
输入: 1994
输出: "MCMXCIV"
### PHP 示例代码
```php
function intToRoman($num) {
$values = [1000 => 'M', 900 => 'CM', 500 => 'D', 400 => 'CD',
100 => 'C', 90 => 'XC', 50 => 'L', 40 => 'XL',
10 => 'X', 9 => 'IX', 5 => 'V', 4 => 'IV', 1 => 'I'];
$roman = '';
foreach ($values as $value => $symbol) {
while ($num >= $value) {
$roman .= $symbol;
$num -= $value;
}
}
return $roman;
}
echo intToRoman(1994); // 输出: MCMXCIV
```
### Python 示例代码
```python
def intToRoman(num):
values = [(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'),
(100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'),
(10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')]
roman = ''
for value, symbol in values:
while num >= value:
roman += symbol
num -= value
return roman
print(intToRoman(1994)) # 输出: MCMXCIV
```
### JavaScript 示例代码
```javascript
function intToRoman(num) {
const values = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'],
[100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'],
[10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']];
let roman = '';
for (let [value, symbol] of values) {
while (num >= value) {
roman += symbol;
num -= value;
}
}
return roman;
}
console.log(intToRoman(1994)); // 输出: MCMXCIV
```
以上代码均实现了将整数转换为罗马数字的功能,并考虑了罗马数字的组成规则。在实际的面试中,根据具体要求,可能还需要对输入进行一些边界条件的检查,比如负数输入等。