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ța
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
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
.
Restricții și precizări
1 ≤
lungimea numărului dat≤ 10000
- Cifrele în baza
16
sunt0, 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.
Exemplu
hex.in
1001010
hex.out
4A
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)
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Hex:
#include <fstream>
using namespace std;
ifstream fin("hex.in");
ofstream fout("hex.out");
const int dim = 1e4 + 1;
const char Hex[] = "0123456789ABCDEF";
char temp[dim], a[dim + 4];
int main()
{
int n = 0;
while( !fin.eof() )
fin >> temp[n++];
n--;
int rest = n % 4;
if( rest )
{
int adaos = 4 - rest;
for( int i = 0, curr = 1; curr <= adaos; ++i, ++curr )
a[i] = '0';
n += adaos;
for( int i = adaos; i < n; ++i )
a[i] = temp[i - adaos];
}
else
for( int i = 0; i < n; ++i )
a[i] = temp[i];
int numar;
bool pozitiv = 0;
for( int i = 0; i < n; i += 4 )
{
numar = (a[i] - '0') * 8 + (a[i + 1] - '0') * 4 + (a[i + 2] - '0') * 2 + (a[i + 3] - '0');
if( numar ) // Elimin zerourile nesemnificative de la inceput, in caz ca exista.
pozitiv = 1;
if( pozitiv )
fout << Hex[numar];
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1300 Hex
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1300 Hex de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!