1003 - Baze1

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 dau două numere b1 b2, reprezentând două baze de numeraţie şi două şiruri de cifre x y, reprezentând două numere: x în baza b1, y în baza b2. Determinaţi suma numerelor x şi y în baza 10.

Date de intrare

Fișierul de intrare baze1in.txt conține pe prima linie numerele b1 b2, iar pe a doua linie cele două şiruri de cifre cu semnificaţia de mai sus.

Date de ieșire

Fișierul de ieșire baze1out.txt va conține pe prima linie numărul S, reprezentând suma dintre x şi y.

Restricţii şi precizări

  • 2 ⩽ b1,b2 ⩽ 10
  • reprezentările în baza 10 ale lui x, y şi suma lor nu depăşesc 2 000 000 000


Exemplul 1

baze1in.txt
2 5 
110 213
baze1out.txt
Datele de intrare corespund restrictiilor impuse
64

Exemplu 2

baze1in.txt
2 5 
110 213333333333333333333
baze1out.txt
Datele de intrare nu corespund restrictiilor impuse


Rezolvare

def main():
    with open('baze1in.txt', 'r') as fin, open('baze1out.txt', 'w') as fout:
        b1, b2 = map(int, fin.readline().strip().split())
        x, y = fin.readline().strip().split()

        if any(len(numar) > 10 for numar in [x, y]):
            fout.write("Datele de intrare nu corespund restrictiilor impuse\n")
            return

        fout.write("Datele de intrare corespund restrictiilor impuse\n")

        x_10 = int(x, b1)
        y_10 = int(y, b2)

        suma_10 = x_10 + y_10

        fout.write(str(suma_10) + '\n')


if __name__ == "__main__":
    main()

Explicatie

110(2) = 6
213(5) = 58
6 + 58 = 64