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