2890 - Base Convertor

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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