Transformar número binário para decimal
Nesse post mostro duas maneiras de algoritmizar o processo de conversão de um número binário para seu correspondente decimal. Na primeira forma é feito a leitura do valor para uma variável inteira e depois extraído cada dígito do valor. Na segunda forma, a leitura é feita para uma string (vetor de caracteres) e utilizado essa estrutura para conversão. São métodos distintos e que mostram como formas tão diferentes de resolver um problema conseguem alcançar o mesmo resultado.
Apenas para recordar, a transformação entre essas bases pode ser feita com a forma polinomial a seguir:
Número binário: 1101
1×23 + 1×22 + 0x21 + 1×20 => 8 + 4 + 0 + 1 = 13
Solução que extrai cada dígito do valor
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(void) {
int valorj, sobra, novoValor = 0;
scanf("%i", &valor);
//pega os dígitos da direita para a esquerda
for (j = 0; j < 6; j++) {
sobra = valor - ((valor / 10)*10);
//printf("%i \n", sobra);
valor = valor / 10;
novoValor += sobra * pow(2,j);
}
printf("Decimal: %i \n", novoValor);
return 0;
}
Solução utilizando string
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(void) {
char numero[10];
scanf("%s", &numero);
int i, tam, novoValor = 0;
tam = strlen(numero); //verifica quantos dígitos tem no número
//pega os dígitos da direita para a esquerda
for (i = tam-1; i >= 0; i--) {
//printf("%c|", numero[i]);
if (numero[i] == '1') {
novoValor += pow(2,tam-1-i);
}
}
printf("Decimal: %i", novoValor);
return 0;
}
Experimente os códigos: http://ideone.com/6idvqI
Ola!.
O erro descoberto diz em Inglês:
[Error] ‘strlen’ was not declared in this scope
Eles faltava algo:
fonte:
http://www.cplusplus.com/reference/cstring/strlen/
NOTA: Leo e eu escrever bem em Português, mas a minha língua nativa é o espanhol:
Obrigado pelo aviso. Realmente na maioria dos compiladores será necessário adicionar a string.h