Римските цифри са представени със седем различни символа: 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; } }
Надявам се това да помогне! Уведомете ме, ако имате въпроси. Не забравяйте да следвате и да ръкопляскате и коментирате