2890 - Base Convertor
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>