Como usar o math.pow ?[RESOLVIDO]

Estou com duvida de como criar uma função que receba um numero e se ele for potência de 2 retorna true em outra variavél boolean!!

se alguem puder me ajudar

olhei todos tópicos do forum mais nenhum explica certo…

gostaria de um exemplo um pouco mais detalhado!!

olhei jah no site da SUN .mais na minha opinião eles deverião colokar um exemplo de uso, como criar, como atribuir valores…!!!

Desde já agradeço!

Desculpe, não vi que era para ver se o número é uma potência de 2. Nesse caso você tem de fazer uma outra coisa, que vou explicar daqui a pouco.

Intendi mais ou menos…

mais olha pra vc ver como tah enunciado do exercicio!!

Escreva uma pequena função em java,isTwoPower, que receba um int I e retorne TRUE se somente se i for potência de 2. A função, entretanto, não pode usar divisões ou multiplicações.

Para saber se um número é uma potência de 2, você precisa de fazer uma de duas coisas:

Se o número for inteiro (como 2097152 que é 2 elevado a 21), você pode ir dividindo o número por 2 até chegar ao número 1, e ver se ele deixa resto em alguma das divisões. Se deixar algum resto, então não é uma potência de 2.

2097152 / 2 = 1048576, resto = 0
1048576 / 2 = 524288, resto = 0

4 / 2 = 2, resto = 0
2 / 2 = 1, resto = 0

O resto pode ser obtido com o operador % e o resultado da divisão acho que você deve saber como obter.

Se o número for um double, calcule o logaritmo em base 2 do número, e veja se ele é um valor inteiro. Por exemplo, log 2097152 na base 2 é Math.log (2097152) / Math.log (2) = 21. Para saber se um número é inteiro, veja se ele, arredondado para o valor inteiro mais próximo (Math.rint), não excede um determinado limiar (por exemplo, 1E-9).

irmãozaum…
mais a o exercicio ta pedindo pra mim fazer isso se divisão ai no caso preciso usar uma biblioteca neh?

Exato… sem multiplicações ou divisões… use soma… como?

Algo assim:

[code] public static boolean isTwoPower(int i) {
if (i == 0)
return true; // 0 elevado a 2
if (i == 1)
return true; // 1 elevado a 2

	int soma = 4; // comecar pelo 2 elevado a 2
	boolean retorno = false;

	while (soma <= i) {
		if (i == soma) retorno = true;
		soma += soma; // multiplicacao forcada, vulgo gambiarra
	}
	return retorno;
}[/code]

Me corrijam se eu estiver errado, mas não é só vc extrair a raiz do numero, se o resultado for inteiro é potência de 2, algo do tipo:


Object result = Math.sqrt(valor);

if (result instaceof Integer) potenciadois = true;
else potenciadois = false;

Não cheguei a testar…

Cara… a idéia é essa mesma, mas é preciso mudar o código porque Math.sqrt retorna um double, então pode ser feito:


		String result = String.valueOf(Math.sqrt(5));
		int decimais = Integer.parseInt(result.substring(result.indexOf(".")+1, result.indexOf(".")+2));
		if (decimais == 0) System.out.println("potencia de dois");
		else System.out.println("não é");
		
		result = String.valueOf(Math.sqrt(16));
		decimais = Integer.parseInt(result.substring(result.indexOf(".")+1, result.indexOf(".")+2));
		if (decimais == 0) System.out.println("potencia de dois");
		else System.out.println("não é");

:wink:

public static boolean isTwoPower(double num){
		if (num == 1)
			return true;
		int contador = 2;
		while (contador <= num){
			if (contador == num)
				return true;
			else contador = contador + 2;
		}
		return false;
	}

Agradecido a todo VCs pela consideração e pela atenção BROTHERs!!!

Fikem cum DEUS!

Sou eu que não estou a perceber o problema ou esse algoritmo não resolve nem de perto o problema dele?

As potências de 2 são: 2,4,8,16,32,64,128,…

Dessas nem2 nem 8 nem 32 nem 128 têm raízes inteiras, muito menos são números pares.

[quote=pmlm]Sou eu que não estou a perceber o problema ou esse algoritmo não resolve nem de perto o problema dele?

As potências de 2 são: 2,4,8,16,32,64,128,…

Dessas nem2 nem 8 nem 32 nem 128 têm raízes inteiras, muito menos são números pares.[/quote]

Pois é, eu tinha confundido “potência de 2” com “quadrado”. Eu editei a resposta, mas provavelmente isso não deu muito certo.
Obviamente determinar se um número é potência de 2 é bem diferente de determinar se um número é um quadrado.