RE:necesito ayuda para resolver
Hola, hay varias formas de hacerlo.
Aqui tienes una forma que usa vector.
#include <stdio.h> /* para printf(), scanf(), fflush() */
#include <stdlib.h> /* para system() */
#include <dos.h> /* para sleep() */
#include <string.h> /* para strchr() */
#include <ctype.h> /* para toupper() */
#include <limits.h> /* para la macro LONG_MAX */
#include <conio.h> /* para getch() */
#define MAX_LON_BIN 31 /* longitud maxima para long en binario */
/* prototipos */
int convertidor( long decimal, int *binario );
void mostrar_binario( const int *binario, int dig );
/* La funcion main() comienza la ejecucion del programa */
int main( void )
{
long decimal;
int binario[ MAX_LON_BIN ];
int dig;
int error;
char continuar = 'S'; /* bandera de continuación */
/* ciclo de control del programa */
while ( continuar != 'N' ) {
/* inicia el primer elemento a cero */
binario[ 0 ] = 0;
do {
system( "cls" );
printf( "\n BINARIO: Este programa muestra un numero decimal ingresado por teclado en su"
"\n ======= representacion binaria. El decimal ingresado debe estar en el rango:\n"
"\n \t\t 0 <= decimal <= %ld\n\n", LONG_MAX );
error = 0;
fflush( stdin );
printf( " Ingrese decimal: " );
scanf( "%ld", &decimal );
printf( "\n\t" );
/* si el decimal es diferente de cero */
if ( decimal != 0 ) {
/* si (se detecta error de rango [desborde o negativos]) */
if ( INT_MAX / decimal < 1 ) {
printf( " Error de rango\n" );
error = 1;
printf( "\t Pulse una tecla para continuar..." );
getch();
}
}
} while( error );
printf( "\n %d = ", decimal );
/* convierte a binario y obtiene el numero de digitos */
dig = convertidor( decimal, binario );
/* muestra el binario */
mostrar_binario( binario, dig );
printf( "\n\n\n" );
printf( "\t\t Otro decimal? S/N: " );
while ( continuar = (char)toupper( getch() ), !strchr("SN", continuar) );
}
return 0; /* retorna al S.O */
}
/* convierte al binario respectivo y retorna su numero de digitos */
int convertidor( long decimal, int *binario ) {
register int i;
if ( decimal ) {
for ( i = 0; decimal > 0; ++i ) {
binario[i] = decimal % 2;
decimal = decimal / 2;
}
return i;
}
return 1;
}
/* muestra el vector */
void mostrar_binario( const int *binario, int dig ) {
register int i;
for ( i = dig - 1; i >= 0; --i )
printf( "%d", binario[i] );
}