1300 - Hex: Difference between revisions
Vardai Erwin (talk | contribs) |
Vardai Erwin (talk | contribs) |
||
Line 85: | Line 85: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | ==Explicație== | ||
Funcția validate_binary_number verifică dacă numărul dat este valid, adică este scris în baza 2. | Funcția validate_binary_number verifică dacă numărul dat este valid, adică este scris în baza 2. |
Latest revision as of 17:20, 7 May 2023
Enunț[edit | edit source]
Andino este un elev pasionat de informatică. Din păcate, profesoara de matematică l-a prins rezolvând probleme de informatică în ora ei. Totuşi, ştiind că el este un elev bun, a decis să-i dea o provocare.
Ea i-a dat o foaie pe care era scris un număr b în baza 2 şi i-a cerut să îl transforme în baza 16 într-un timp cât mai scurt.
Andino, fiind în criză de timp, vă roagă să-l ajutaţi!
Cerință[edit | edit source]
Să se transforme numărul dat de profesoară în baza 16.
Date de intrare[edit | edit source]
Fișierul de intrare hex.in conține pe prima linie numărul b, scris în baza 2.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Fișierul de ieșire hex.out va conține pe prima linie numărul x, reprezentând numărul b scris în baza 16. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări[edit | edit source]
- 1 ≤ lungimea numărului dat ≤ 10000
- Cifrele în baza 16 sunt 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
- Pentru 40% din teste, 1 ≤ lungimea numărului ≤ 20
- Dacă îl ajutaţi pe Andino să rezolve problema, el vă va răsplăti cu 100 de puncte
Exemplul 1[edit | edit source]
- hex.in
- 1001010
- hex.out
- 4A
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
Explicație[edit | edit source]
Numărul 1001010(2) este scrierea în baza 2 a numărului 74(10). Scrierea în sistemul hexazecimal a numărului 74 este 4A(16).
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
def validate_binary_number(binary_number):
for digit in binary_number: if digit not in ['0', '1']: return False return True
def binary_to_decimal(binary_number):
decimal_number = 0 for digit in binary_number: decimal_number = decimal_number * 2 + int(digit) return decimal_number
def decimal_to_hex(decimal_number):
hex_digits = "0123456789ABCDEF" hex_number = "" while decimal_number > 0: remainder = decimal_number % 16 hex_number = hex_digits[remainder] + hex_number decimal_number //= 16 return hex_number
if __name__ == '__main__':
with open('hex.in', 'r') as fin: binary_number = fin.readline().strip()
if not validate_binary_number(binary_number): print('Datele de intrare nu corespund restricțiilor impuse.') else: print("Datele de intrare corespund restricțiilor impuse.") decimal_number = binary_to_decimal(binary_number) hex_number = decimal_to_hex(decimal_number) with open('hex.out', 'w') as fout: fout.write(hex_number)
</syntaxhighlight>
Explicație[edit | edit source]
Funcția validate_binary_number verifică dacă numărul dat este valid, adică este scris în baza 2.
Funcția binary_to_decimal convertește numărul dat din baza 2 în baza 10, prin parcurgerea cifrelor numărului și adunarea puterilor de 2 corespunzătoare cifrelor de 1.
Funcția decimal_to_hex convertește numărul dat din baza 10 în baza 16, prin împărțirea repetată a numărului la 16 și adăugarea cifrei corespunzătoare rămășiței în șirul rezultat.
În blocul if __name__ == '__main__':, citim numărul dat din fișierul de intrare hex.in, verificăm dacă este valid, apoi convertim numărul din baza 2 în baza 10 și din baza 10 în baza 16. La final, scriem rezultatul în fișierul de ieșire hex.out.