# PBinfo #1300 – hex – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## 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ț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).

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream in("hex.in");
ofstream out("hex.out");
const int dim = 1e4 + 1;
const char Hex[] = "0123456789ABCDEF";
char temp[dim], a[dim + 4];
int main() {
    int n = 0;
    while(!in.eof())
        in >> 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 = 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 adv = 0;
    for (int i = 0; i < n; i = i + 4) {
        numar = (a[i] - '0') * 8 + (a[i + 1] - '0') * 4 + (a[i + 2] - '0') * 2 + (a[i + 3] - '0');
        if(numar) adv = 1;
        if(adv) out << Hex[numar];
    } return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1300)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1300/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1300/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
