Răspuns :
Stii ca 4=2*2. Deci ceea ce iti trebuie sa reprezinti printr-o cifra in baza 4 iti trebuie doua cifre in baza 2.
Atunci, numarul tau 100011 poate fi scris: 10 00 11, Dar stim ca fiecare grup de doua cifre reprezinta un numar in baza 4, si il scrie folosindu-ne de valaorea lui in baza 2
10=2*0+1=2
00=2*0+0=0
11=2*1+1=3
Deci la sfarsit 100011 devine 203 in baza 4. In cazul in care ai un numar de lungime impara, pur si simplu adauga un zero in fata sirului
De exemplu daca ai 10101(care este 21) ii punem un zero in fata si avem:
010101-01 01 01- 111, si intr-adevar 111 in baza 4 este 4^2+4+1=16+4+1=21
Daca te uiti pe relatia pe care ti-am dat-o la problema anterioara, o sa iti dai seama rapid cum iese asa.
Aici este codul
#include <iostream>
#include <stdlib.h>//itoa
#include <cmath>
#include <cstring>//string
using namespace std;
//functie care transforma caracterul "1" in cifra "1"
//scad din valoarea caracterului valoarea din tabelul lui ascii a lui 0
//diferenta imi da numarul respectiv
//vezi codul ascii de la numarul 48
int char_to_int(char c){
return c-'0';
}
int main(){
int i,d,d1,d2;
//folosesc string pentru ca numarul binar poate incepe cu 0
// sirul t va fi cel in care pastrez valoarea finala a numarului in baza 4
string s,t="";
//sir de 2 caractere care sa pastreze cele 2 cifre binare
char part [2];
cin>>s;
i=0;
//cum am spus, daca are lungime impara, pui 0 in fata
//ca sa ai 2 cate 2 cifre binare
if(s.length()%2==1){
s="0"+s;
}
while(i<s.length()){
//faci operatia de transformare in intregi si calculezi cat da cifra in baza 4
d1=char_to_int(s[i]);
d2=char_to_int(s[i+1]);
d=2*d1+d2;
//transformi acea cifra inapoi in caracter cu itoa-10 este baza scrisa
itoa(d,part,10);
//atasezi la sirul care este initial gol pana cand termini de citit sirul binar
t.append(part);
i+=2;
}
cout<<t;
}
Atunci, numarul tau 100011 poate fi scris: 10 00 11, Dar stim ca fiecare grup de doua cifre reprezinta un numar in baza 4, si il scrie folosindu-ne de valaorea lui in baza 2
10=2*0+1=2
00=2*0+0=0
11=2*1+1=3
Deci la sfarsit 100011 devine 203 in baza 4. In cazul in care ai un numar de lungime impara, pur si simplu adauga un zero in fata sirului
De exemplu daca ai 10101(care este 21) ii punem un zero in fata si avem:
010101-01 01 01- 111, si intr-adevar 111 in baza 4 este 4^2+4+1=16+4+1=21
Daca te uiti pe relatia pe care ti-am dat-o la problema anterioara, o sa iti dai seama rapid cum iese asa.
Aici este codul
#include <iostream>
#include <stdlib.h>//itoa
#include <cmath>
#include <cstring>//string
using namespace std;
//functie care transforma caracterul "1" in cifra "1"
//scad din valoarea caracterului valoarea din tabelul lui ascii a lui 0
//diferenta imi da numarul respectiv
//vezi codul ascii de la numarul 48
int char_to_int(char c){
return c-'0';
}
int main(){
int i,d,d1,d2;
//folosesc string pentru ca numarul binar poate incepe cu 0
// sirul t va fi cel in care pastrez valoarea finala a numarului in baza 4
string s,t="";
//sir de 2 caractere care sa pastreze cele 2 cifre binare
char part [2];
cin>>s;
i=0;
//cum am spus, daca are lungime impara, pui 0 in fata
//ca sa ai 2 cate 2 cifre binare
if(s.length()%2==1){
s="0"+s;
}
while(i<s.length()){
//faci operatia de transformare in intregi si calculezi cat da cifra in baza 4
d1=char_to_int(s[i]);
d2=char_to_int(s[i+1]);
d=2*d1+d2;
//transformi acea cifra inapoi in caracter cu itoa-10 este baza scrisa
itoa(d,part,10);
//atasezi la sirul care este initial gol pana cand termini de citit sirul binar
t.append(part);
i+=2;
}
cout<<t;
}
Vă mulțumim pentru vizita pe platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Așteptăm cu entuziasm să reveniți și vă invităm să ne adăugați la lista de favorite!