Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 정수를 로마 숫자로 변환하는 프로그램

<시간/>

숫자 번호가 있다고 가정합니다. 이에 상응하는 로마 숫자로 변환해야 합니다. 로마 숫자는 아래와 같은 기호와 값을 포함합니다 -

  • "나" =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