Римските цифри са представени със седем различни символа: I, V, X, L, C, D и M.

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

Например 2 се изписва като II с римски цифри, само две единици, добавени заедно. 12 се записва като XII, което е просто X + II. Числото 27 се записва като XXVII, което е XX + V + II.

Римските цифри обикновено се изписват от най-голямото към най-малкото отляво надясно. Числото за четири обаче не е IIII. Вместо това числото четири се записва като IV. Тъй като единицата е преди пет, ние го изваждаме, правейки четири. Същият принцип важи и за числото девет, което се записва като IX. Има шест случая, в които се използва изваждане:

  • I може да се постави преди V (5) и X (10), за да се получат 4 и 9.
  • X може да се постави преди L (50) и C (100), за да се получат 40 и 90.
  • C може да се постави преди D (500) и M (1000), за да се получат 400 и 900.

Дадено е цяло число, преобразувайте го в римска цифра.

Пример 1:

Input: num = 3
Output: "III"
Explanation: 3 is represented as 3 ones.

Пример 2:

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

Пример 3:

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

Ограничения:

  • 1 <= num <= 3999

Решения:

Python:

class Solution(object):
    def intToRoman(self, num):
        romans = [
            ("M", 1000),
            ("CM", 900),
            ("D", 500),
            ("CD", 400),
            ("C", 100),
            ("XC", 90),
            ("L", 50),
            ("XL", 40),
            ("X", 10),
            ("IX", 9),
            ("V", 5),
            ("IV", 4),
            ("I", 1)
        ]
        roman = ""
        for r, v in romans:
            while num >= v:
                roman += r
                num -= v
        return roman

C#:

public class Solution {
    public string IntToRoman(int num) {
        List<(string, int)> romans = new List<(string, int)>
        {
            ("M", 1000),
            ("CM", 900),
            ("D", 500),
            ("CD", 400),
            ("C", 100),
            ("XC", 90),
            ("L", 50),
            ("XL", 40),
            ("X", 10),
            ("IX", 9),
            ("V", 5),
            ("IV", 4),
            ("I", 1)
        };
        string roman = "";
        foreach ((string, int) r in romans)
        {
            while (num >= r.Item2)
            {
                roman += r.Item1;
                num -= r.Item2;
            }
        }
        return roman;
    }
}

Java:

class Solution {
    public String intToRoman(int num) {
        List<String> romans = Arrays.asList("M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I");
        List<Integer> values = Arrays.asList(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < romans.size(); i++) {
            while (num >= values.get(i)) {
                sb.append(romans.get(i));
                num -= values.get(i);
            }
        }
        return sb.toString();
    }
}

Javascript:

/**
 * @param {number} num
 * @return {string}
 */
var intToRoman = function(num) {
    const romans = [    ["M", 1000],
        ["CM", 900],
        ["D", 500],
        ["CD", 400],
        ["C", 100],
        ["XC", 90],
        ["L", 50],
        ["XL", 40],
        ["X", 10],
        ["IX", 9],
        ["V", 5],
        ["IV", 4],
        ["I", 1]
    ];
    let roman = "";
    for (const [r, v] of romans) {
        while (num >= v) {
        roman += r;
        num -= v;
        }
    }
    return roman;
};

Машинопис:

function intToRoman(num: number): string {
    const romans: any = [    
        ["M", 1000],
        ["CM", 900],
        ["D", 500],
        ["CD", 400],
        ["C", 100],
        ["XC", 90],
        ["L", 50],
        ["XL", 40],
        ["X", 10],
        ["IX", 9],
        ["V", 5],
        ["IV", 4],
        ["I", 1]
    ];
    let roman = "";
    for (const [r, v] of romans) {
        while (num >= v) {
        roman += r;
        num -= v;
        }
    }
    return roman;
};

PHP:

class Solution {

    /**
     * @param Integer $num
     * @return String
     */
    function intToRoman($num) {
        $romans = [
            ["M", 1000],
            ["CM", 900],
            ["D", 500],
            ["CD", 400],
            ["C", 100],
            ["XC", 90],
            ["L", 50],
            ["XL", 40],
            ["X", 10],
            ["IX", 9],
            ["V", 5],
            ["IV", 4],
            ["I", 1]
        ];
        $roman = "";
        foreach ($romans as $r) {
            while ($num >= $r[1]) {
            $roman .= $r[0];
            $num -= $r[1];
            }
        }
        return $roman;
    }
}

Надявам се това да помогне! Уведомете ме, ако имате въпроси. Не забравяйте да следвате и да ръкопляскате и коментирате