숫자 번호가 있다고 가정합니다. 이에 상응하는 로마 숫자로 변환해야 합니다. 로마 숫자는 아래와 같은 기호와 값을 포함합니다 -
- "나" =1
- "V" =5
- "X" =10
- "L" =50
- "C" =100
- "D" =500
- "M" =1000
이러한 기호는 일반적으로 가장 큰 것에서 가장 작은 것으로, 왼쪽에서 오른쪽으로 작성되며 모든 기호의 값을 합산하여 계산할 수 있습니다. 그러나 낮은 값의 기호가 높은 값의 기호 왼쪽에 있는 특수한 경우가 있습니다. his는 높은 값에서 낮은 값을 빼는 것을 나타냅니다.
다음은 그러한 경우의 예입니다 -
- "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"가 1000 + 500 + 10 + 10 =1520을 나타내므로 출력은 "MDXX"가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- res :=빈 문자열
- table =이 형식의 쌍(val, symbol)을 포함하는 목록입니다. 여기서 val은 값이고 symbol은 관련 기호 [(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")]
- 표의 각 쌍(캡, 로마자)에 대해 다음을 수행합니다.
- d :=num/cap의 바닥
- m :=num 모드 캡
- res :=res + roman * d
- num :=m
- 반환 결과
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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