当前位置: 面试刷题>> 整数转罗马数字(经典算法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 示例代码

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 示例代码

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 示例代码

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

以上代码均实现了将整数转换为罗马数字的功能,并考虑了罗马数字的组成规则。在实际的面试中,根据具体要求,可能还需要对输入进行一些边界条件的检查,比如负数输入等。

推荐面试题