Algorithmus Square und Multiply

Blacksonny

Mitglied
Ich gehe meine Altklausuren momentan durch und bin auf ein Problem gestoßen, dass ich ohne weiteres nicht selber lösen kann. Wäre euch dankbar, wenn ihr mir helfen könntet!

Code:
Die folgende Methode berechnet die Potenz b^e mit Hilfe des Algorithmus Square and Multiply.
Also zum Beispiel:
sam(2,4) liefert 16
sam(3,3) liefert 27
public int sam(int b, int e) {
int result=1;
while (e>0) {
if (e%2==1)
result=result*b;
b=b*b;
e=e/2;
}
return result;
}

a) Falls ein negativer Wert e übergeben wird, soll das korrekte Ergebnis 1/be zurückgegeben werden. Beispiel: sam(2,-2)=0.25
 
Und wo liegt das Problem? Abgesehen davon verstehe ich den Sinn der If-Klausel nicht so ganz. Das kann man auch anders lösen.
 
Hallo,
Um deine originale Idee zu erhalten, könntest du folgendes tun:
Java:
    public static double sam(int b, int e) {
        double result=1;
        int e_orig=e;
        while (e!=0) {
            if (e%2!=0)
                result=result*b;
            b=b*b;
            e=e/2;
            //System.out.println("e="+e+",b="+b+",result="+result);
        }
        return e_orig>=0 ? result : 1.0 / result;
    }
Z.B. um 0.25 wiederzugeben, muss deine Funktion eher double sein.
 

Zurück
Oben