Ir para o conteúdo
DiogoFonseca1

[Resolvido] Programa que escreva as potências de 2

Mensagens Recomendadas

DiogoFonseca1

Boa tarde :)

Estava treinar e deparei-me com este problema:

"Complete a assinatura e implemente o método isPower2 por forma a que o seguinte troço de código escreva as potências de 2 compreendidas entre 1 e 18000.

for(int i=1 ; i<=18000 ; ++i)

if (isPower2(i)) System.out.println( i );

"

Dão me isto para completar:

"

public static ___________ isPower2( ___________________ ) {

}

"

Eu conseguiria resolver com logaritmos, mas não posso utilizar metodos Math nem objectos , por isso neste momento não estou a ver como resolvo;

Alguém me pode ajudar?

Muito obrigado desde ja. :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DiogoFonseca1

Já estive a pensar melhor e afinal era problema de interpretação já resolvi ficou assim :

import java.util.Scanner;
public class ex2{

	public static void main(String[] args){
			 Scanner in = new Scanner(System.in);
			 for(int i=1 ; i<=18000 ; ++i) if (isPower2(i)) System.out.println( i );
   }


	public static boolean isPower2(int num){

		 for( int i =num; i>1;i=i/2){
				 if(i==1) break;
				 if(i%2 != 0) return false;
		}
		 return true;
  }
}

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Percebes que isso que escreveste é completamente errado, certo? Porque é que percorres e verificas todos os números quando a única coisa que precisas é de fazer uma simples multiplicação?

Editado por KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DiogoFonseca1

Percebes que isso que escreveste é completamente errado, certo? Porque é que percorres e verificas todos os números quando a única coisa que precisas é de fazer uma simples multiplicação?

Estas te a referir ao main certo?

O que está escrito no main ja era dado no exercicio a unica coisa que tinha de fazer era escrever o método.

Refiz o exercicio:

import java.util.Scanner;
public class ex2{

	   public static void main(String[] args){
			  Scanner in = new Scanner(System.in);

			  for( int i =1; i<18000;i*=2){
					 System.out.println(i);
			  }
	 }
}

Assim ja esta melhor? :)

Eu estou a começar java por isso ainda não sei muito

Obrigado desde ja :)

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DiogoFonseca1

So vou dar uma dica:

right shift operator

Não quererias dizer left shift, pois eu pus cada numero a shiftar uma vez para a esquerda e ja deu :)

for( int i =1; i<18000;i<<=1){

System.out.println(i);

}

Obrigado pelas dicas :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
siul72

Não quererias dizer left shift, pois eu pus cada numero a shiftar uma vez para a esquerda e ja deu :)

for( int i =1; i<18000;i<<=1){

System.out.println(i);

}

Obrigado pelas dicas :)

Isso!

Agora podes dar como resolvido o post :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.