2890 - Base Convertor

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă numărul n în baza b, să se afișeze numărul n în convertit în baza c.

Date de intrare[edit | edit source]

Fișierul de intrare base_converterin.txt conține pe prima linie numerele n, b, c, separate prin spații.

Date de ieșire[edit | edit source]

Fișierul de ieșire base_converterout.txt va conține pe prima linie numărul n în baza c.

Restricţii şi precizări[edit | edit source]

  • la afișarea numerelor în baze mai mare decât 10, cifrele mai mari decât 9 sunt înlocuite cu litere mari din alfabetul englez (10 cu A, 11 cu B, etc.);
  • 1≤nrcif(n(b))≤1585
  • 2≤b≤36
  • 2≤c≤36

Exemplu 1[edit | edit source]

base_converterin.txt
26 17 11
base_converterout.txt
Datele de intrare corespund restrictiilor impuse
37


Exemplu 2[edit | edit source]

base_converterin.txt
26 40 11
base_converterout.txt
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def base_converter(n, b, c):

   # Funcția convertește numărul n din baza b în baza c.
   # Convertim numărul n din baza b în baza 10
   n_in_base_10 = int(n, b)
   # Convertim numărul n din baza 10 în baza c
   n_in_base_c = 
   while n_in_base_10 > 0:
       n_in_base_10, remainder = divmod(n_in_base_10, c)
       if 0 <= remainder <= 9:
           n_in_base_c = str(remainder) + n_in_base_c
       else:
           n_in_base_c = chr(ord('A') + remainder - 10) + n_in_base_c
   return n_in_base_c


def main():

   with open('base_converterin.txt', 'r') as fin, open('base_converterout.txt', 'w') as fout:
       n, b, c = fin.readline().strip().split()
       b = int(b)
       c = int(c)
       # Verificăm dacă datele de intrare respectă restricțiile
       if len(n) > 1585 or not (2 <= b <= 36) or not (2 <= c <= 36):
           fout.write("Datele de intrare nu corespund restrictiilor impuse\n")
           return
       fout.write("Datele de intrare corespund restrictiilor impuse\n")
       # Convertim numărul n din baza b în baza c și scriem rezultatul în fișierul de ieșire
       fout.write(base_converter(n, b, c) + '\n')


if __name__ == "__main__":

   main()


</syntaxhighlight>