# Potenz einer Zahl, der Exponent ist dabei eine beliebige ganze Zahl?



## Haubitze_Broese (28. Apr 2010)

muss die Aufgabe im Titel bearbeiten und komme irgendwie nicht klar...

also ich habe jetzt folgende version:

public class Main {

    public static void main(String[] args) {
        int zahl=5;
        int exp=3;


        System.out.println(Math.pow(zahl, exp));
    }

}

mit dem Math.pow funktioniert es auch aber wie mache ich das ohne Math.pow?

Danke


----------



## function (28. Apr 2010)

```
int ergebnis = 1;
for(int i=0; i<exp; i++)
  ergebnis *= zahl;
```


----------



## LP_SE (28. Apr 2010)

Das geht ganz einfach mit dem Operator "^". (Funktioniert nur bei Integer, Double geht nicht, das reicht aber, da es ja nur ganze Zahlen sein sollen)

```
package src;

public class CPow {

public static void main(String[] args){
    int base = Integer.parseInt(args[0]);  //kann auch eine beliebige feste zahl sein
    int exp = Integer.parseInt(args[1]);  //kann auch eine beliebige feste zahl sein
    int erg = base^exp;
    System.out.println(erg);
}

}
```


----------



## Suinos (28. Apr 2010)

LP_SE hat gesagt.:
			
		

> Das geht ganz einfach mit dem Operator "^".


Dieser Operator macht nicht das, was du glaubst.
Ein Test zeigt das:

```
public static void main(String... args)
{
	System.out.println(3 ^ 3);
}
```


----------



## function (28. Apr 2010)

LP_SE hat gesagt.:


> Das geht ganz einfach mit dem Operator "^". (Funktioniert nur bei Integer, Double geht nicht, das reicht aber, da es ja nur ganze Zahlen sein sollen)


das ist vollkommener Blödsinn ^ ist exkl. Oder und hat rein gar nichts mit Exponenten zu tun...


----------



## Marco13 (28. Apr 2010)

Die gepostete Exponentiationsmethode ist auch nicht das gelbe vom Ei... man sollte da eher was in Richtung Binäre Exponentiation ? Wikipedia machen...


----------



## ice-breaker (28. Apr 2010)

```
public class BinaryExp {
	public static long pow(long a, int b) {
		// Rekursionsanker
		if (b == 1)
			return a;
		if (b == 2)
			return a * a;

		// ungerade exp müssen gerade gemacht werden
		if (b % 2 == 1)
			return pow(a, b - 1) * a;

		return pow(pow(a, b / 2), 2);

	}

	public static void main(String[] args) {
		System.out.println(pow(3, 21));
	}
}
```

würde auch iterativ und wahrscheinlich kürzer funktionieren, finde es so aber ehrlich gesagt am intuitivsten (man sollte natürlich die Potenzgesetzte kennen )

Achso, die Funktion ist nur definiert würde b >= 1


----------



## Ark (28. Apr 2010)

Wo wir schon dabei sind:

```
// x und y beliebig
public static double pow(double x,int y){
	return y>=0 ? _pow(x,y):1/_pow(x,-y);
}

private static double _pow(double x,int y){
	double res=1.0;
	while(y!=0){
		if((y&1)==0){
			x*=x;
			y>>=1;
		}
		else{
			res*=x;
			y&=0xFFFFFFFE;
		}
	}
	return res;
}
```
Wenn x ein int und/oder y >= 0 sein sollte, vereinfacht es sich an den entsprechenden Stellen. 

Ark


----------



## Haubitze_Broese (29. Apr 2010)

eine frage habe ich da noch...

wofür steht das " *= " in " ergebnis *= zahl; "
also * ist halt mal und = gleich aber beides zusammen?


----------



## srea (29. Apr 2010)

erg *= zahl bedeutet soviel wie erg = erg * zahl
erg += zahl bedeutet soviel wie erg = erg + zahl 
usw...


----------



## Tomate_Salat (29. Apr 2010)

[c]>>=[/c],[c]|[/c],[c]&[/c]...  = Bit-Operatoren


----------

