Informatică, întrebare adresată de laurstefan2002, 8 ani în urmă

Problema #946 douabaze de pe pbinfo va rog:
Cerința
Se dă un număr n scris în baza 2. Să se afișeze valoarea acestuia în baza 4.

Date de intrare
Programul citește de la tastatură scrierea în baza 2 a numărului n.

Date de ieșire
Programul va afișa pe ecran scrierea în baza 4 a numărului n.

Restricții și precizări
n are cel mult 100 de cifre în baza 2

Exemplu
Intrare

100011
Ieșire

203
Explicație
100011(2) este scrierea binară a numărului 35(10) . Numărul 35 trecut în baza 4 are scrierea 203(4)

Răspunsuri la întrebare

Răspuns de boiustef
3

Răspuns:

#include <iostream>

#include <cstring>

using namespace std;

char binar[100], ch;

int p[51], i, n, k=-1, inc=0;

int main()

{

   cin >> binar;

   n=strlen(binar);

   cout << n << "\n";

   if (n%2==1) { ++k; p[k]=1; ++inc;}

   for (i=inc; i<n-1; i+=2 )

   {

       if (binar[i]=='0' && binar[i+1]=='0') { ++k; p[k]=0;}

       if (binar[i]=='0' && binar[i+1]=='1') { ++k; p[k]=1;}

       if (binar[i]=='1' && binar[i+1]=='0') { ++k; p[k]=2;}

       if (binar[i]=='1' && binar[i+1]=='1') { ++k; p[k]=3;}

   }

   cout << k << "\n";

   for (i=0; i<=k; ++i)

       cout << p[i];

}

Explicație:

deoarece numărul n, binar, are până la 100 de cifre binare, el nu poate fi citit ca număr ci ca un şir de caractere.  Pentru a converti un număr din baza  2 în baza 8, numărul binar se împarte în grupuri formate din 3 cifre binare, şi fiecărui grup îi corespunde o cifră octală. Se iau 3 cifre binare de la 2^3=8. Cum noi avem de convertit numărul binar în baza 4 ( 4= 2^2 ) vom diviza numărul binar începînd de la dreapta la stânga, în grupuri de câte 2 cifre binare. Cifrele în baza 4 de numeraţie sunt 0, 1, 2, 3 ce corespund grupurilor de cifre binare 00, 01, 10, 11.


laurstefan2002: Salit, din nefericire, codul da 0p
laurstefan2002: Te rog sa refaci codu, mulțumesc l
laurstefan2002: Sigur e codu de la 946?
boiustef: daaaa, copie de aici în word, după pui în codeblocks
boiustef: iată confirmarea:

Problema douabaze Operații I/O tastatură/ecran
Limita timp 0.1 secunde Limita memorie Total: 64 MB / Stivă 8 MB
Id soluție #15148254 Utilizator Boiu Stefan (stefan52)
Fișier douabaze.cpp Dimensiune 559 B
Data încărcării 02 Aprilie 2019, 17:47 Scor / rezultat 100 puncte
boiustef: iată link la cod de pe pastebin.com (să nu ai probleme la copy/paste)
https://pastebin.com/XSggLGxx
boiustef: ămi dai de ştire cum reuşeşti...
boiustef: ??????????????? cum e????
laurstefan2002: Eu asa fac tot timpul cu word
laurstefan2002: Acum a mers, multumesc!
Alte întrebări interesante