calcular potencia en java?

Iniciado por cracken422, 9 Julio 2012, 01:02 AM

0 Miembros y 1 Visitante están viendo este tema.

cracken422

necesito hacer un algoritmo que calcule una potencia, pidiendo al usuario que ingrese la base y luego el exponente

por ej la multiplicacion es

case 3: IOConsole.println("Ingrese el primer multipilcando");
                            a=IOConsole.readInt();
                            IOConsole.println("Ingrese el segundo multiplicando");
                            b=IOConsole.readInt();
                            resultado=op=a*b;
             IOConsole.println(a+"*"+b+"="+resultado);
                            break;

alguien tiene una idea? gracias

Ferno

Pensemos.

¿Qué es estrictamente la potencia de un número?
Es multiplicar ese mismo número por si mismo, cuantas veces diga el exponente.
Si vos tenes la base y el exponente que te pasan por consola, podes realizar un bucle for desde el 1 al valor correspondiente al exponente, e ir acumulando las multiplicaciones de la base.

Fuera del bucle, imprimir el acumulador.

cracken422

lo hice de dos formas


      for(int i=1;i<n;i++)
      {
      base=base*base;
      }

      IOConsole.println("El resultado es "+base+"");

siendo n el exponente me da 2^3=16



      for(int i=1;i<=potencia;i++)
      {
      acumulador=base*base;
      IOConsole.println("El resultado es "+acumulador+"");
      }

2^3 me da 4

no veo la forma de hacer repetir la multiplicacion igual veces el numero del exponente :-/

konarr

#3
:P

rommel89

primero incluye la libreria math

import java.math;

y con la funcion de math.pow() para elevar a n potencia cualquier numero y su sintaxis es asi

math.pow(numeroAElevar,potenciaAelevar), si quiero elevar 3 al cuadrado lo aria asi

math.pow(3,2);

o

import java.math;
import java.Scanner;

Scanner leer=new Scanner(System.in);

system,.out.println("Digite el numero a elevar a n potencia");

int numero=leer.nextInt();

system.out.println("Digite la potenia");

int potencia=leer.nextInt();

int total=math.pow(numero,potencia);

System.out.println("El numero: "+numero+" elevado a la potencia: "+potencia+" es: "+total+);

nota si escribes math en minuscula el editor despues del punto te pondra en mayuscula la primera letra math=Math

cracken422

@konnar usé tu codigo con java IOConsole y me dio 4^2=64

@rommel habia visto lo de la libreria math, pero tengo que hacerlo con ciclo for y encontre muy poco en internet

Ferno

Te recomiendo que agarres lápiz y papel y hagas el seguimiento del programa.
En tu primer code, supongamos que tu base es "2" y tu exponente "3" (por ende, el resultado debería ser 8).

En tu primer code, entra al for (n == 1) --> base = base*base --> 2 = 2*2 --> base == 4.
sigue en el bucle for (n == 2) --> 4 = 4*4 --> base == 16
sigue en el bucle for (n == 3) Aquí ya no entra puesto que 3 < 3 es falso.

Esto obviamente está mal.

Veamos, vos tenés tu base, tu exponente, y podés utilizar un acumulador.
Entonces, podemos inicializar nuestro acumulador antes de entrar al bucle for:

acumulador = base

Recuerda que no se debería de perder la información ni de la base, ni del exponente en ningún momento del programa (ese es tu fallo en tu primer code, sobreescribís la variable base).

Al haber inicializado, podés entrar en el bucle for sin problemas.

entra al for (n == 1) --> acumulador = acumulador*base --> 2 = 2*2 --> acumulador == 4.
sigue en el bucle for (n == 2) --> 4 = 4*2 --> acumulador == 8
sigue en el bucle for (n == 3) Aquí ya no entra puesto que 3 < 3 es falso.
Nuestro acumulador nos da el resultado correcto.

Código (java) [Seleccionar]
acumulador = base;
for(int i=1;i<potencia;i++)
{
      acumulador=acumulador*base;
}

IOConsole.println("El resultado es "+acumulador+"");

konarr

#7
jejej sorry, me pasa por hacerlo a la rápida, ahora si

Código (java) [Seleccionar]

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class potencia{

public static void main(String[] args) throws Exception{

int resul = 1, base, exponente;
short i;

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Ingrese base: ");
               base = Integer.parseInt(bf.readLine());
       
               System.out.print("Ingrese exponente: ");
               exponente = Integer.parseInt(bf.readLine());
       
       for(i=1; i<=exponente; i++){
       
        resul = resul * base;
       }
       
        System.out.println("resultado: " +resul);
}
}

cracken422

gracias ahora calcula bien, el problema de la variable acumulador es que si quiero hacer otro calculo con potencia en el menu me da otro resultado por el mismo acumulador, pense hacer algo como
private static int funcPot(int n, int p) {
int numero = n
for(int i = 0; i < p; i++)

resultado = funcMul(numero, n), pero no entiendo bien la variable private static

konarr

Cita de: cracken422 en 10 Julio 2012, 21:27 PM
gracias ahora calcula bien, el problema de la variable acumulador es que si quiero hacer otro calculo con potencia en el menu me da otro resultado por el mismo acumulador, pense hacer algo como
private static int funcPot(int n, int p) {
int numero = n
for(int i = 0; i < p; i++)

resultado = funcMul(numero, n), pero no entiendo bien la variable private static

uhmm, quieres emplear metodos ?
lo que quieres hacer es que una ves ingresado la primerapotencia el programa te pregunte si deceas continuar ?