Ir ao conteúdo
  • Cadastre-se
Guilherme Sixe

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

Posts recomendados

#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.

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

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
Este tópico está parado há muito tempo. Certifique-se que a sua mensagem tem a ver com o tema sendo discutido. Obrigado.

Junte-se à conversa

Você pode postar agora e cadastrar-se depois. Se você tem uma conta, faça o login para postar.

Visitante
Responder

×   Você colou conteúdo com formatação.   Restore formatting

  Só é possível ter até 75 emoticons.

×   O link foi automaticamente convertido para mostrar o conteúdo.   Clique aqui para mostrá-lo como link comum

×   Seu texto anterior foi restaurado.   Limpar o editor

×   You cannot paste images directly. Upload or insert images from URL.






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

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!