Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
1300 - Hex
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Enunț== 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ță== Să se transforme numărul dat de profesoară în baza '''16'''. ==Date de intrare== Fișierul de intrare hex.in conține pe prima linie numărul''' b''', scris în baza''' 2'''. ==Date de ieșire== 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== *'''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== ;'''hex.in ''' :1001010 ;'''hex.out ''' :4A ;Ieșire :Datele de intrare corespund restricțiilor impuse. ==Explicație== 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== ===Rezolvare ver. 1=== <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== 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.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width