मान लीजिए हमारे पास एक संख्या num है। हमें इसे उसके समकक्ष रोमन अंक में बदलना है। रोमन अंकों में प्रतीक और मान होते हैं जैसे:
- "I" = 1
- "V" = 5
- "X" = 10
- "L" = 50
- "C" = 100
- "D" = 500
- "M" = 1000
ये प्रतीक आमतौर पर सबसे बड़े से सबसे छोटे तक, बाएं से दाएं क्रम में लिखे जाते हैं, और सभी प्रतीकों के मानों को जोड़कर गणना की जा सकती है। लेकिन कुछ विशेष मामले हैं, जहां कम मान का प्रतीक अधिक मान के प्रतीक के बाईं ओर होता है, यह दर्शाता है कि कम मान को अधिक मान से घटाया जाता है।
ऐसे मामलों के उदाहरण:
- "I" "V" से पहले, मान 4।
- "I" "X" से पहले, मान 9।
- "X" "L" से पहले, मान 40।
- "X" "C" से पहले, मान 90।
- "C" "D" से पहले, मान 400।
- "C" "M" से पहले, मान 900।
रोमन अंकों में कुछ नियम भी हैं:
- कोई प्रतीक 3 से अधिक बार दोहराया नहीं जाता।
- "V", "L", और "D" प्रतीक दोहराए नहीं जाते।
इसलिए, यदि इनपुट n = 1520 है, तो आउटपुट "MDXX" होगा, क्योंकि "MDXX" 1000 + 500 + 10 + 10 = 1520 दर्शाता है।
हल करने का दृष्टिकोण
- res := खाली स्ट्रिंग
- table = (मान, प्रतीक) प्रारूप में जोड़े वाली सूची [(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")]
- table में प्रत्येक जोड़ी (cap, roman) के लिए, करें:
- d := num/cap का फ्लोर
- m := num mod cap
- res := res + roman * d
- num := m
- res लौटाएं
उदाहरण
def solve(num):
res = ""
table = [
(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"),
]
for cap, roman in table:
d, m = divmod(num, cap)
res += roman * d
num = m
return res
num = 1520
print(solve(num))
इनपुट
1520
आउटपुट
MDXX