คำอธิบายปัญหา
กำหนดตัวเลข num ให้แปลงเป็นตัวเลขโรมัน (Roman Numerals) ตัวเลขโรมันประกอบด้วยสัญลักษณ์และค่าดังนี้:
- I = 1, V = 5, X = 10, L = 50
- C = 100, D = 500, M = 1000
กฎการเขียน: เขียนจากค่ามากไปน้อย (ซ้ายไปขวา) และบวกค่าทั้งหมด แต่มีกรณีพิเศษที่สัญลักษณ์ค่าน้อยอยู่ซ้ายค่ามาก (การลบ): IV=4, IX=9, XL=40, XC=90, CD=400, CM=900
ขั้นตอนการแก้ปัญหา
- สร้างตารางคู่
(ค่า, สัญลักษณ์)เรียงจากมากไปน้อย รวมกรณีการลบด้วย - วนลูปผ่านตาราง: หาร
numด้วยค่า (divmod) ได้ผลหารdและเศษm - ต่อสัญลักษณ์
dครั้ง เข้ากับผลลัพธ์ แล้วอัปเดตnum = m - ทำซ้ำจน
num = 0
ตัวอย่าง
n = 1520 → MDXX (1000 + 500 + 10 + 10)
การตนการทำงาน (Python)
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)) # Output: MDXX
อินพุต / เอาต์พุต
Input: 1520 Output: MDXX