Números en binario al revés
Considere un entero positivo n que se escribe bmbm-1...b1b0 en binario, donde m ≥ 0 y bm = 1. El complemento de n es el entero que se escribe amam-1...a1a0 en binario, donde ai = 1 – bi para toda 0 ≤ i ≤ m. El reverso de n es el entero que se escribe b0b1...bm-1bm en binario. Escribe un programa que calcule el complemento p y el reverso q de un entero n. Por ejemplo, si n = 2006 (11111010110 en binario) entonces su complemento es p = 41 (00000101001 en binario) y su reverso es q = 863 (01101011111 en binario).
Entrada:
Un número entero n tal que 1 ≤ n ≤ 4,000,000,000.
Salida: Dos números enteros p, q separados por un espacio.
Ejemplo de salida 2006 41 863
Esto es lo que llevo de codigo
#include<stdio.h>
#include<windows.h>
main()
{
int normal=0,reverso=0,complemento=0;
int num=0,cont3=0,cont4=0,tam=0;
int arreglo[30],arreglo2[30],arreglo3[30];//El reverso se va a guardar en arreglo, el normal en arreglo2 y el complemento en arreglo3
printf("ingresa un numero:");
scanf("%d",&num);
for(int cont=0;;cont++)
{
if(num>1)
{
arreglo[cont]=num%2;
}
else if(num==1)
{
arreglo[cont]=num;
arreglo[cont+1]=-1;
break;
}
else if(num==0)
{
arreglo[cont]=num;
arreglo[cont+1]=-1;
break;
}
num=num/2;
}
printf("\nReverso :");
for(int cont2=0;;cont2++)//Reverso
{
if(arreglo[cont2]!=-1)
printf("%d",arreglo[cont2]);
else
{
cont3=cont2-1;
tam=cont2;
break;
}
}
printf("\nNormal :");
for(;cont3>=0;cont3--)//Normal
{
arreglo2[cont4]=arreglo[cont3];
if(arreglo2[cont4]==1)//este if else es para llenar el arreglo de complemento
arreglo3[cont4]=0;
else
arreglo3[cont4]=1;
printf("%d",arreglo2[cont4]);
cont4++;
}
fflush(stdin);
printf("\nComplemento:");
arreglo3[cont4]=-1;
for(int cont5=0;;cont5++)//complemento
{
if(arreglo3[cont5]!=-1)
printf("%d",arreglo3[cont5]);
else
break;
}
printf("\n");
system("pause");
}