Tuesday, February 2, 2010

2.3 - Suma Binaria

Aquí una forma para simular la suma binaria, me salio algo largo el código, después tratare de mejorarlo un poco, uso un algoritmo simple de suma sobre la base del sistema en este caso binario.

----------------------------------------------------------------------------------------------------

#include <iostream>
#include <string>
#include <algorithm>

bool decimal1[25];
bool decimal2[25];

//Nota: El std:: significa que usamos algun elemento de la biblioteca estandar

void convierte(unsigned long n1, unsigned long n2){
    std::string binario;
    int c=0,acomulado=0;
    for(unsigned long i=n1,j=n2;i!=0 || j!=0;i/=2,j/=2){    //Calculamos los numeros binarios
        if(i % 2 != 0){
            decimal1[c] = 1;
        }else{
            decimal1[c] = 0;
        }
       
        if(j % 2 != 0){
            decimal2[c] = 1;
        }else{
            decimal2[c] = 0;
        }
        c++;
    }

    for(int i=0;i<25;i++){
        binario.push_back('0' + ((decimal1[i]+decimal2[i]+acomulado) % 2)); //Calculamos el resultado del digito
        acomulado = (decimal1[i]+decimal2[i]+acomulado)/2;    //Acomulamos si sobrepaso la base
        decimal1[i]=0;                                        //Reiniciamos los valores
        decimal2[i]=0;
    }
  
    std::reverse(binario.begin(),binario.end());            //Como push_back lo inserta adelante de la cadena, lo invertimos
   
    if(binario.empty()){
        binario.push_back('0');                                //Si nos dieron 0 les davolemos 0
    }
      
       std::cout <<"Suma: " << binario <<"\n\n\n";                //Resultado
}

int main(){
    unsigned long n1,n2;
    while(std::cin>>n1>>n2){                                //Ciclo pidiendo los valores decimales
        convierte(n1,n2);
    }
  
    return 0;
}

No comments:

Post a Comment