Ver Mensaje Individual
  #6 (permalink)  
Antiguo 01/03/2014, 08:32
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 5 meses
Puntos: 49
Respuesta: Dudas sobre binario a decimal

Cita:
Iniciado por jhonny6721 Ver Mensaje
Usa cadena de texto como numero binario

Usa cadenas de texto, asi podrás aceptar mas numeros de lo normal, asi será mas robusta tu funcion.

Espero haber ayudado.
El número de dígitos a aceptar está limitado por el número en decimal al que corresponda, de ahí el uso que hago de unsigned long long. Conste que la limitación de ocho dígitos es porque así lo pedía el autor del tema.

Aprovecho para corregir el anterior post, donde me falto un digitos=1:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.   int i,digitos;
  5.   unsigned long long int numero,N,num=0;
  6.   printf("Introduzca un numero binario de ocho digitos maximo:\n");
  7.   do{
  8.     digitos=1;
  9.     scanf("%llu",&numero);
  10.     for (i=10;(numero/i)>0;i*=10){
  11.       digitos++;
  12.     }
  13.     if (digitos>=9){
  14.       puts("He dicho ocho digitos maximo");
  15.       printf("Introduzca un numero binario de ocho digitos maximo:\n");
  16.     }
  17.   }while (digitos>=9);
  18.   num=0,N=numero;
  19.   for (i=1;N>0;i*=2){
  20.     num+=i*(N%10);
  21.     N/=10;
  22.   }
  23.   printf("\n%llu\n",num);
  24.   return 0;
  25. }

Y de paso aporto una posible solución con cadenas:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.   int i,j,digitos=0;
  5.   unsigned long long int num=0;
  6.   char numero[65];
  7.   printf("Introduzca un numero binario de ocho digitos maximo:\n");
  8.   do{
  9.     digitos=0;
  10.     scanf("%s",&numero);
  11.     for (i=0;numero[i];i++)
  12.       digitos++;
  13.     if (digitos>=9){
  14.       puts("He dicho ocho digitos maximo");
  15.       printf("Introduzca un numero binario de ocho digitos maximo:\n");
  16.     }
  17.   }while (digitos>=9);
  18.   for (j=digitos-1,i=1;j>=0;i*=2,j--){
  19.     num+=i*(numero[j]-'0');
  20.   }
  21.   printf("\n%llu\n",num);
  22.   return 0;
  23. }

¡¡¡Saluditos!!!