A ver si me consigo explicar...
Son dos bucles uno que saca el resultado de 2 elevado a X mas grande menor que un numero introducido por teclado y otro que resta ese resultado al numero para cuando pase por el primer bucle y ademas eleva 10^X y lo suma cada vez para dar el numero binario.
Ejemplo si queremos sacar el binario de 15
1 bucle: Resultado de 2^x mas alto <o igual a 15 = es 2elevado a 3 =8
2 bucle: 15-8=7 y 10^3 =1000 + 0= 1000
1 bucle: Resultado de 2^x mas alto <o igual a7 = es 2elevado a 2 =4
2 bucle: 7-4=3 y 10^2 =100 + 1000 =1100
1 bucle: Resultado de 2^x mas alto < o igual a 13 = es 2elevado a 1 =2
2 bucle: 3-2=1 y 10^1 =10 + 1100 = 1110
1 bucle: Resultado de 2^x mas alto < o igual a 1 = es 2elevado a 0 =2
2 bucle: 1-1=0 y 10^0 =1 + 1110 = 1111 15 en binario
Código
#include<stdio.h> #include<math.h> #include<conio.h> void main(){ int num,ex,suma,res; ex=0; suma=0; do{do{ ex++; }while(res<=num);//deberia encontar el resultado de 2^ex mas alto menor que un numero introducido por teclado ex=ex-2;res=(pow (2,ex));//corrige errores del primer bucle porque al salir del bulcle ex ha aumentado dos veces mas de lo debido num=num-res;//resta el resultado del bucle al numero introducido por teclado ex=0; res=0;//reinicia variable }while(num<=0); }//void