4042 - b16 rec
Cerința
Se citește un număr natural n în baza 10. Să se transforme acest număr în baza 16, folosind un subprogram recursiv.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran un șir de caractere reprezentând transformarea numărul n în baza 16.
Restricții și precizări
- Reprezentarea în baza 10 a numărului dat este un număr natural cel mult egal cu 4 294 967 295.
- Cifrele în baza 16 sunt : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Exemplu
Intrare
16712523
Ieșire
FF034B
Explicație
Funcția DecToHexRec(n) primește ca parametru un număr întreg pozitiv n și returnează reprezentarea sa în baza 16 (sau sistemul hexadecimal) utilizând recursivitatea.
Funcția verifică dacă n este mai mic decat 16. Dacă acest lucru este adevărat, înseamnă că n este o cifră în baza 16 și funcția returnează reprezentarea sa ca și string. Dacă n este mai mare decât 16, funcția este apelată recursiv pentru a obține reprezentarea cifrelor mai semnificative ale lui n. Variabila q este folosită pentru a reține câtul împărțirii lui n la 16 și r este folosită pentru a reține restul acestei împărțiri. Dacă restul este mai mic decat 10, funcția returnează reprezentarea acestuia ca și string, iar dacă este mai mare sau egal cu 10, funcția returnează caracterul corespunzător din tabelul ASCII pentru cifrele hexazecimale.
În final, funcția returnează reprezentarea numărului n în baza 16 ca și un string.
Rezolvare
<syntaxhighlight lang="python"> def validate_n(n):
if isinstance(n, int) and n >= 0 and n <= 4294967295: return True else: return False
def DecToHexRec(n):
if n < 16: if n < 10: return str(n) else: return chr(ord('A') + n - 10) else: q = n // 16 r = n % 16 if r < 10: return DecToHexRec(q) + str(r) else: return DecToHexRec(q) + chr(ord('A') + r - 10)
def main():
n = input("Introduceți un număr întreg pozitiv mai mic sau egal cu 4294967295: ") try: n = int(n) if validate_n(n): hex_n = DecToHexRec(n) print(f"Reprezentarea în hexazecimal a numărului {n} este: {hex_n}") else: print("Numărul introdus nu este valid.") except ValueError: print("Nu ați introdus un număr întreg.")
</syntaxhighlight>