Ir ao conteúdo
  • Cadastre-se
Guilherme Sixe

RESOLVIDO Verificar se um numero é potencia de 2 - o que esta de errado no meu codigo?

Recommended Posts

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main(){
	int n;
	float lg;
	
	scanf("%d", &n);
	lg=log10(n)/log10(2);
	
	if(lg%2==0){
		printf("é");
	}
	else{
		printf("Não é");
	}
	system("pause");
	return 0;
}

Isso foi ate onde eu cheguei. Não sei se resolve o meu problema. Mas alem disso esta dando erra na hora do resto que nao pode ser um float com int. Alguem sabe resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola

tente o seguinte

converta a variável lg de "float" para "int"

em seguida, no trecho "lg=log10(n)/log10(2);",

após o sinal de igualdade adicione (int) com abre e fecha parenteses

como o exemplo:

 

      lg=(int)log10(n)/log10(2);

 

acontece que a funçao log10() retorna um tipo flutuante

que você deve converte-lo e passa-lo para a variável lg com o tipo de dado int.

Essa variável deve ser do tipo int pois na linha 11 você quer tirar o modulo de outro numero do tipo int, o que não seria possível fazendo com dois tipos de dado diferente

 

 

espero ter te ajudado.

Editado por Gaami Sijha
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main(){
	int n;
	float lg;

	scanf("%d", &n);
	do{
        lg=log10(n)/log10(2);

        if(lg>(int)lg){
            printf("nao é\n");
        }
        else{
            printf("é\n");
        }
        scanf("%d", &n);
	}while(n!=0);
	system("pause");
	return 0;
}

Como saber se o numero é potencia de 2? a variável lg vai ter que ter um valor inteiro, se tiver valor decimal significa que não é potencia de 2.

Para verificar se possui valor decimal basta subtrair a somente a parte inteira de lg do proprio lg. Se o valor for diferente de 0 significa que possui valor decimal, então não é potencia de 2.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade você tem que usar o operador de módulo (%)

 

// Verifica se você dividir o valor por 2, se terá algum resto

if ((variavel % 2) == 0)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Miguel Nischor Não sei se tem outro jeito de usar, mas se fizer float % int dá erro...

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

×