Ziel ist es ein Programm zu schreiben, welches auf die alte äthiopische Art multipliziert. Dabei werden die beiden zu multiplizierenden Zahlen nebeneinander geschrieben. Die linke Zahl wird nun immer halbiert, bis sie 1 ist und die rechte Zahl wird solange immer wieder verdoppelt. Jetzt werden die rechten Zahlen aufaddiert, wo die linke zugehörige Zahl ungerade ist.
Als Beispiel wollen wir 17 mit 34 multiplizieren.
Zahl1 | Zahl2 |
---|---|
17 | 34 |
8 | 68 |
4 | 136 |
2 | 272 |
1 | 544 |
Ergebnis = 34 + 544 = 578
Für den Anfang habe ich mir drei Variablen erstellt. Zwei die wir miteinander multiplizieren möchten und eine um das spätere Ergebnis festzuhalten.
1zahl1 := 17
2zahl2 := 34
3erg := 0
Als nächstes wollen wir Anfangen die Zahlen zu verändern. Da wir das machen bis Zahl1 gleich 1 ist habe ich dafür eine FOR-Schleife benutzt.
1for zahl1 > 0 {
2 //Prüfen ob Zahl ungerade
3 if zahl1%2 == 1 {
4 erg += zahl2
5 }
6
7 zahl1 /= 2
8 zahl2 *= 2
9}
Wir prüfen also ob die Zahl1 ungerade ist. Sollte sie ungerade sein zählen wir die zweite Zahl zu unserem Ergebnis. Anschließend halbieren wir die erste und verdoppel die Zweite Zahl.
1package main
2
3import "fmt"
4
5func main() {
6 zahl1 := 17
7 zahl2 := 34
8 erg := 0
9
10 for zahl1 > 0 {
11 //Prüfen ob Zahl ungerade
12 if zahl1%2 == 1 {
13 erg += zahl2
14 }
15
16 zahl1 /= 2
17 zahl2 *= 2
18 }
19
20 fmt.Println(erg)
21
22}