Ola, gostaria de saber como posso fazer a potencia sem usar a biblioteca math
Usando um laço for
:
int numero = 5;
int base = numero; //sem essa variavel o programa nao funciona
int expoente = 3;
for (int i = 1; i < expoente; i++){ //calcula o resultado final
numero = base * numero;
}
System.out.println("resultado: " + numero); //imprime o resultado final
Porém, eu recomendo que você use a classe Math.
1 curtida
Isso vai-me dizer que 5⁰ = 5 quando na realidade seria 1.
int base = 5;
int resultado = 1;
int expoente = 3;
for (int i = 0; i < expoente; i++){ //calcula o resultado final
resultado = resultado * numero;
}
System.out.println("resultado: " + resultado); //imprime o resultado final
2 curtidas
Depende.
Se o expoente for um número inteiro positivo, dá pra fazer um loop, como já indicaram acima.
Se o expoente for negativo, precisa de um pequeno ajuste. Como x-y é o mesmo que (1 / x)y, ficaria assim:
double base = 5;
int expoente = -3;
if (expoente < 0) {
expoente = -expoente; // inverte o sinal do expoente, pra poder iterar corretamente
base = 1.0 / base; // x^(-y) é o mesmo que (1 / x)^y
}
double resultado = 1.0;
for (int i = 0; i < expoente; i++) {
resultado *= base;
}
System.out.println(resultado);
Agora se o expoente tiver casas decimais, aí já complica. Até daria para fazer alguma coisa como isso aqui:
static double pow(double base, double ex) {
if (base == 0)
return 0;
if (ex == 0) {
return 1;
} else if (ex < 0) {
return 1 / pow(base, -ex);
} else if (ex > 0 && ex < 1) {
return nthRoot(base, (int) (1 / ex));
} else if ((int) ex % 2 == 0) {
double half_pow = pow(base, ex / 2);
return half_pow * half_pow;
} else {
return base * pow(base, ex - 1);
}
}
static double nthRoot(double A, int n) {
int k = 6;
double x[] = new double[k];
for (int i = 0; i < k; i++)
x[i] = 1;
for (int i = 0; i < k - 1; i++)
x[i + 1] = (1.0 / n) * ((n - 1) * x[i] + A / pow(x[i], n - 1));
return x[k - 1];
}
Mas aí já acho que é uma complicação desnecessária. A menos que seja um exercício para fins didáticos, o melhor é simplesmente usar Math.pow
que já trata de todos esses casos para você.
Até porque fiz alguns testes com o código acima e os resultados nem sempre dão a mesma coisa. Ex:
double base = 5.2;
double expoente = 3.5;
System.out.println(Math.pow(base, expoente)); // 320.63557234467925
System.out.println(pow(base, expoente)); // 320.6357605596782
1 curtida