3144 - Cifre Romane

De la Universitas MediaWiki
Versiunea din 19 martie 2023 12:04, autor: Sovago Rares-Andrei (discuție | contribuții) (Pagină nouă: == Cerinţa == 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 s...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerinţa

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

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", programul va afișa in fișierul cifre_romane.out va conține scrierea cu cifre romane a lui N. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ 3999
  • cifrele romane sunt:

I=1 V=5 X=10 L=50 C=100 D=500 M=1000


Exemple

Exemplul 1

Intrare
4
Ieșire
Datele sunt introduse corect.
IV

Exemplul 2

Intrare
5
Ieșire
Datele sunt introduse corect.
V

Exemplul 3

Intrare
4000
Ieșire
Datele nu corespund restricțiilor impuse.



Rezolvare

# 3144 - Cifre Romane
def validare(n):
    if n < 1 or n > 3999:
        return False
    return True


def transforma_in_romane(n):
    romane = [(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')]
    rest = n
    rezultat = ''
    while rest > 0:
        for arab, roman in romane:
            while rest >= arab:
                rezultat += roman
                rest -= arab
    return rezultat


def main():
    with open('cifre_romane.in', 'r') as f:
        n = int(f.readline().strip())

    if not validare(n):
        print('Datele nu corespund restricțiilor impuse.')
    else:
        print('Datele sunt introduse corect.')
        rezultat = transforma_in_romane(n)
        with open('cifre_romane.out', 'w') as f:
            f.write(rezultat)


if __name__ == '__main__':
    main()