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;
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment