Tuesday, February 2, 2010

2.4 - Resta Binaria

Aquí otro ejemplo con la misma mecanica que la suma binaria pero aplicada a la resta.

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

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

int mayor[25];
int menor[25];

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

void convierte(unsigned long n1, unsigned long n2){
    std::string binario;                                //Definimos string del resultado
    int c=0;
    for(unsigned long i=n1,j=n2;i!=0 || j!=0;i/=2,j/=2){
        if(n1 >= n2){                                    //Acomodamos el mayor - menor para que no quede resta negativa
            if(i % 2 != 0){
                mayor[c] = 1;
            }else{
                mayor[c] = 0;
            }
           
            if(j % 2 != 0){
                menor[c] = 1;
            }else{
                menor[c] = 0;
            }
        }else{
            if(i % 2 != 0){
                menor[c] = 1;
            }else{
                menor[c] = 0;
            }
           
            if(j % 2 != 0){
                mayor[c] = 1;
            }else{
                mayor[c] = 0;
            }
        }
        c++;
    }
   
    for(int i=0;i<25;i++){
        if((mayor[i]-menor[i]) < 0){                    //Acomodamos el algoritmo como cualquier resta
            mayor[i+1] -= 1;
            mayor[i] += 2;                                //Como el sistema es binario aumentamos 2
            std::cout << 'h';
        }

        binario.push_back('0' + (mayor[i]-menor[i]));    //Asignamos en la cadena el resultado
        mayor[i] = 0;                                    //Reiniciamos los valores
        menor[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 <<"Resta: " << binario <<"\n\n\n";
}

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

No comments:

Post a Comment