2890 - Base Convertor

De la Universitas MediaWiki

Cerinţa

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

Date de intrare

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

Date de ieșire

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

  • 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

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


Exemplu 2

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


Rezolvare

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()