Rezolvare completă PbInfo #1300 Hex

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 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.

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 Adresa de email.

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!