Informatică, întrebare adresată de ilinca6a, 9 ani în urmă

Se dă un număr n scris în baza 2. Să se afișeze valoarea acestuia în baza 4.

Răspunsuri la întrebare

Răspuns de Entryon
1
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;
   
}


ilinca6a: multumesc mult !
Entryon: Cu placere!
Alte întrebări interesante