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)
.
#include <bits/stdc++.h> using namespace std; ifstream cin ("hex.in"); ofstream cout ("hex.out"); char hx[ ] = "0123456789ABCDEF", a[10000001]; int sum[10000001], ind=0; int n; int main() { cin >> a; n = strlen(a); for (int i = n-1; i >= n%4; i-=4) sum[++ind] = (a[i-3]- '0')*8 + (a[i-2]- '0')*4 + (a[i-1]- '0')*2 + a[i]- '0'; switch(n%4) { case 1: sum[++ind] = a[0] -'0';break; case 2: sum[++ind] = (a[0] - '0')*2 + (a[1] - '0');break; case 3: sum[++ind] = (a[0] - '0')*4 + (a[1] - '0')*2 + a[2] - '0';break; } for (int i = ind; i >= 1; --i)cout << hx[sum[i]]; return 0; }