Problem mit Potenzen
-
Ich habe mal eine funktion geschrieben um potenzen zu berechnen aber es funktioniert nicht der compiler komplimiert es aber dann berechnet er das ergebnis des potenzierens nicht, hier die funktion:
[c++] int potenz(int x, int exponent)
{
int i = 0;
while(i==exponent)
{
x*=x;
i++;
}
return x;
}[/c++]wo ist da ein fehler?
-
Naja, das ist eigentlich alles falsch
(Jedenfalls mehr als 50%)int potenz(int basis, int exponent) { int i = 0; int ergebnis = 1; while(i != exponent) { ergebnis *= basis; ++i; } return ergebnis; }So müsste es stimmen. Der größte Fehler ist natürlich das
while(i == exponent) //bricht sofort abanstatt
while(i != exponent)der zweite Fehler ist das
x *= x;Dadurch wird x nämlich immer mit sich selbst malgenommen, obwohl es im vorhergehenden Schleifendurchlauf ja schon verändert wurde. Dafür habe ich jetzt eine Hilfsvariable eingeführt.
Felix
EDIT: Die Hilfsvariable i könnte man sich natürlich auch sparen:
int potenz(int basis, int exponent) { int ergebnis = 1; while(exponent != 0) { ergebnis *= basis; --exponent; } return ergebnis; }
-
#include <stdio.h> int potenz(int a, int b) { int p = 1; while (b--) { p *= a; } return p; } void main(void) { int i, j; printf("Zwei Zahlen: "); scanf("%d %d", &i, &j); printf("potenz(%d,%d)=%d\n", i, j, potenz(i, j)); }Edit:// zu langsam
-
also wenn man schon nicht auf negative Potenzen eingeht:
unsigned int
sonst:
double mypow(int base, int exp) { if(exp > 0) { double result = 1.0; while(exp--) { result *= base; } } else if(exp==0) return 1.0; else return 1.0/Pow(base, -exp); }