3144 - Cifre Romane

From Bitnami MediaWiki
Revision as of 12:04, 19 March 2023 by Sovago Rares-Andrei (talk | contribs) (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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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">

  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>