Programming

T03-002-01 Ejercicios con funciones que devuelven enteros.

Enunciado

Queremos hacer un programa Java que calcule la potencia de una serie de números enteros, con base tanto positiva como negativa y con exponente tanto positivo como negativo.

Atención:

  • Cualquier número elevado a 0, da 1
  • La potencia de un número elevado a un exponente negativo es igual a (1 / número elevado a exponente positivo)

Ejemplos

2 elevado a 3 es 8

3 elevado a 3 es 27

-3 elevado a 3 es -27

2 elevado a -4 es 0.0625

ENTRADA

La entrada comienza con un número indicando cuántos casos de prueba habrá que procesar.

Cada uno de los casos está compuesto por dos números enteros distintos, -100 ≤ AB ≤ 100, la base y el exponente.

SALIDA

Por cada caso de prueba, el programa el resultado de la potencia, que será un double.

RESTRICCIONES

Deberá resolverse el problema diseñando una función que reciba 2 números enteros y devuelva el resultado de la potencia de elevar el primero al segundo. 

NO se puede utilizar la función Math.pow ni ninguna otra que resuelva el problema, sino que éste debe ser resuelto algorítmicamente por ti en la función.

Aunque Juez-LTI no lo va a tener en cuenta, RESUELVELO haciendo uso de la función dentro de la propia función, para resolver las potencias de exponente negativo (La potencia de un número elevado a un exponente negativo es igual a (1 / número elevado a exponente positivo)

El programa principal, para cada uno de los casos, pedirá los números por teclado y usará la función para resolver el problema, imprimiendo posteriormente el resultado calculado y devuelto por la función.

Solución


											
import java.util.Scanner; public class FPotencia { public static void main(String[] args) { // TODO code application logic here Scanner sc = new Scanner(System.in); int base = 0, exponente = 0; int numCasos = 0; numCasos = sc.nextInt(); for (int i = 1; i <= numCasos; i++) { base = sc.nextInt(); exponente = sc.nextInt(); System.out.println(potencia(base, exponente)); } } public static double potencia(int base, int exponente) { double resultado; if (exponente == 0) { resultado = 1; } else if (exponente < 0) { resultado = 1 / potencia(base, exponente * -1); } else { resultado = base; for (int i = 2; i <= exponente; i++) { resultado = resultado * base; } } return resultado; } }

Input

12 0 6 -8 0 8 0 2 10 -2 10 2 9 -2 9 3 -3 -3 -3 10 8 3 -7 -4 -8
12 0 6 -8 0 8 0 2 10 -2 10 2 9 -2 9 3 -3 -3 -7 10 8 3 -3 -4 -8

Output

0.0 1.0 1.0 1024.0 1024.0 512.0 -512.0 0.037037037037037035 -0.037037037037037035 1.0E8 4.572473708276177E-4 1.52587890625E-5
0.0 1.0 1.0 1024.0 1024.0 512.0 -512.0 0.037037037037037035 -4.572473708276177E-4 1.0E8 0.037037037037037035 1.52587890625E-5