3114 - abq

De la Universitas MediaWiki

Cerință

Alexandru a învățat azi despre numerele romane și cum se scriu acestea. Fiind distras de ce spuneau colegii a ajuns acasă și a realizat că nu știe cum să transforme un număr din cifre arabe în cifre romane. Deoarece a doua zi are un test numai din acest capitol, vă roagă să îl ajutați la transformarea unui număr N dat, scris cu cifre arabe în cifre romane.

Date de intrare

Fișierul cifre_romane.in conține un număr natural N scris cu cifre arabe.

Date de ieșire

Fișierul cifre_romane.out va conține scrierea cu cifre romane a lui N.

Restricții

  • 1≤N≤3999
  • cifrele romane sunt:
    • I=1
    • V=5
    • X=10
    • L=50
    • C=100
    • D=500
    • M=1000

Exemplu

cifre_romane.in

4

cifre_romane.out

IV

Rezolvare

import sys

def convert_to_roman(num):
    """Converts a given number from Arabic numerals to Roman numerals."""
    roman_numerals = {
        1: "I",
        5: "V",
        10: "X",
        50: "L",
        100: "C",
        500: "D",
        1000: "M"
    }

    result = ""
    while num > 0:
        # Find the largest Roman numeral that is less than or equal to the current number
        for key in sorted(roman_numerals.keys(), reverse=True):
            if num >= key:
                result += roman_numerals[key]
                num -= key
                break

    return result

def main():
    """Reads input and converts numbers to Roman numerals."""
    num = int(input())

    # Check if the number is within the valid range
    if 1 <= num <= 3999:
        roman_numeral = convert_to_roman(num)
        print(roman_numeral)
    else:
        print("Numarul nu este in intervalul valid (1 ≤ N ≤ 3999).")

if __name__ == "__main__":
    sys.stdin = open("cifre_romane.in")
    sys.stdout = open("cifre_romane.out", "w")
    main()
    sys.stdin.close()
    sys.stdout.close()