Ich habe diese Frage,Suche Quadrat einer Zahl
schreiben Sie eine Funktion, die ein Quadrat der angegebenen Ganzzahl n ohne Multiplikation zurückgegeben.
Lösung ist
public static int sq(int n){
int i = n;
int sq = 0;
int count = 0;
while(i > 0){
if((i & 1) == 1){
sq += n << count;
}
i = i >> 1;
count++;
}
return sq;
}
Ich verstehe, was die Funktion tut, aber ich verstehe nicht, warum dies funktioniert.
Kann jemand erklären, warum das eine funktionierende Lösung ist?
Es ist nur eine einfache (und ineffiziente) Implementierung der binären Multiplikation - mit welchem Teil hast du Schwierigkeiten? Denken Sie daran zurück, wie Sie in der Grundschule gelernt haben, eine "lange Hand" -Multiplikation zu machen. –
Beachten Sie auch, dass der Code fehlerhaft ist - es schlägt für n <0 fehl. –