Ziel ist es ein Programm zu schreiben, welches ermitteln soll, ob eine Zahl eine Münchhausener Zahl ist. Eine Münchhausener Zahl ist eine Zahl, welche aus der Summe ihrer Ziffern exponenziert mit sich selbst gebildet werden kann. Beispiel: 34353³ + 4⁴ + 3³ + 5⁵ = 27 + 256 + 27 + 3125 = 3435.
1package main
2
3import (
4 "fmt"
5 "math"
6)
7
8func main() {
9 zahl := 3435
10 var erg int
11 for copyZahl := zahl; copyZahl > 0; copyZahl /= 10 {
12 erg = erg + int(math.Pow(float64(copyZahl%10), float64(copyZahl%10)))
13 }
14
15 if erg == zahl {
16 fmt.Println(zahl, "Ist eine Münchhausen-Zahl")
17 } else {
18 fmt.Println(zahl, " ist keine Münchhausener-Zahl")
19 }
20}
Um eine Zahl zu überpüfen habe ich mir vorerst zwei Variablen vereinbart. Einmal eine für die eigentliche zu überprüfende Zahl und eine für das Ergebnis zum anschließenden abgleichen.Jetzt ist es Ziel an jede einzelne Ziffer der Zahl zu gelangen. Das kann man mithilfe einer Schleife machen. Ich nehme jeden Schleifendurchlauf die Zahl Modulo 10 um an die letzte Stelle zu kommen und um anschließend die Zahl durch 10 zu teilen um im nächsten Durchlauf an die nächste Stelle zu kommen.Jetzt kann man zu dem Ergebnis immer die Potenz von der Ziffer hoch sich selbst nehmen. In Go ist die math.Pow Funktion auf float-Werte geschrieben, daher muss ich meine Variablen mittels typecasting zu float konvertieren.
1float64(meinInt) // typecasting in Go