Ir ao conteúdo
  • Cadastre-se
OddFox

C++ Transformar um Número da base Binária para Base Decimal

Recommended Posts

Olá. Estou tendo dificuldades em resolver um exercício de C++ que achei online. Ele pede para construir um código que consiga transformar um número da base binária para a base decimal. Eu escrevi um código, mas ele não está rodando. Gostaria de saber o que ele tem de errado.

 

#include <stdio.h>
#include <string.h>

int main (){
    int binario[50], decimal, dois=1, i;
        printf ("Digite o seu numero em binario: ");
        scanf ("%d", &binario);
        i=strlen(binario);
        i=i-1;
        while (i>=0){
            decimal+=binario*dois;
            dois=dois*2;
            i=i-1;
        }
        printf ("O numero %d na base decimal e %d", binario, decimal);
    return 0;
}

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@OddFox     para postar seu código é melhor usar o botão   <>    que está lá na barra    de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres como os   [ i ]  que sumiram do seu código ,    e seu código está bom , mas você precisa usar uma variável char para pegar os dígitos do número binário , pois se for hum inteiro então cada caractere do número não será zero ou hum e sim um número muito alto e não teria como pegar cada um desses dígitos ,   então seu código poderia ser assim  :

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
/*              0    1    2     3   4     5       6      7         8*/
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9          10        11        12        13        14     15    */
static int __BACKGROUND = BLACK;
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int color, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = color;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    color + (__BACKGROUND << 4));
}

int main (){
    int decimal=0,dois=1,i;
    char binario[50];
    do{
        system("cls");
        textcolor(14,0);
        printf ("Digite o seu numero em binario: ");
        textcolor(10,0);
        scanf ("%s",binario);        /* pega os dígitos do número binario */
        i=strlen(binario);
    }while(i > 8);              /* repete se digitar mais de oito dígitos */
    i--;
    while( i >= 0 ){
        decimal += ((int)binario[i]-48)*dois;/*valor decimal do caractere */
                       /*pegando código ASCII do caractere e subtraindo 48*/
        dois *= 2;
        i--;
    }
    textcolor(15,9);
    printf("\nO numero %d na base decimal eh %d\n\n",atoi(binario),decimal);
    textcolor(7,0);
    return 0;
}

 

  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 , valeu! Não sabia desse <>, vou começar a usa-lo. Vou ver esse código de que você fez e entender como você o montou. Obrigado pelo ajuda.

  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz assim

 

void main() {
    unsigned long numero, soma=0, i=0;
    printf("Digite o numero em binario: ");
    scanf("%ld", &numero);
    while(numero != 0) {
        soma += (numero%2)*pow(2,i);
        numero /= 10;
        i++;
    }
    printf("%d", soma);
}

mas esse código só funciona bem pra binários abaixo de 1111111111.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×