(Aquest problema fa servir la funció
base64\_to\_char del problema "Codificar en Base64
(1)".)
Es tracta de fer un programa que, donada una seqüència de bytes a l’entrada (naturals entre 0 i 255), la codifiqui en base 64. La codificació funciona de la següent manera, i treballa amb tripletes de 3 bytes:
Primer, cada 3 bytes d’entrada , i , construïm un enter en base 256 de la següent manera:
Després, reinterpretem en base 64 i n’extraiem les xifres, que ara són 4: , , , i . El procés és totalment anàleg a extreure les xifres d’un nombre en base 10, però en base 64. El que estem fent és calcular els dígits de la fórmula següent:
(Cal recordar que el procés d’extracció de xifres treballat a PRO1 produeix les xifres al revés, és a dir, començant per .)
Per últim, usant la funció base64_to_char convertim
,
,
i
en caràcters i els mostrem a la sortida en aquest ordre.
Si la seqüència d’entrada no té un llargada múltiple de 3, just al final, tindrem un grup de només 1 o 2 bytes:
Si tenim un grup de 2 bytes: assignem
,
i seguim igualment els passos de la codificació. Un cop amb les xifres
,
canviem
pel caràcter ’=’.
Si tenim un grup d’1 byte: assignem
i
,
i seguim igualment els passos de la codificació. Un cop amb les xifres
,
canviem tant
com
pel caràcter ’=’.
L’entrada consisteix en diverses seqüències de bytes. Cadascuna comença amb un enter que indica el nombre de bytes que segueixen i després hi ha bytes, a on cadascún és només un nombre natural entre 0 i 255 (ambdós inclosos).
La sortida ha de ser una línia per a cada cas amb la codificació en base 64 de la seqüència de bytes de l’entrada, sense espais entre els caràcters.
Aquest problema té com a centre d’interès la correctesa i la llegibilitat. Sobre la llegibilitat, es valorarà que el programa utilitzi funcions per evitar repetició i separar les diverses tasques.
Si teniu la funció base64_to_char i el Jutge us l’ha
acceptat, useu-la directament. Si no, copieu la següent definició:
char base64_to_char(int d) {
static char _syms[65] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
return _syms[d];
}Autoria: Pau Fernández
Generació: 2026-01-25T13:19:01.988Z
© Jutge.org, 2006–2026.
https://jutge.org