3144 - Cifre Romane
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
<syntaxhighlight lang="python" line="1">
- 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()
</syntaxhighlight>