Quersumme einer Zahl
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.
-
-
VB1963 schrieb:
strNumber As String--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
Danke für deinen Hinweis, das habe ich nicht bedacht.
Bei überlangen Zahlen, glaub ich, wird's mit Long dann auch nicht mehr gehen.
Dann müsste man den String so untersuchen...
...der Einzeiler ist mir in diesem Forum einmal aufgefallen und habe ihn mir zur Seite gelegt! -
-
-
-
-
AliveDevil schrieb:
.Range(0, strNumber.Length - 1)
hier liegst du im Irrtum - probiers aus. -
-
@EDR:
Ich habe mir den Code näher angeschaut.
Die Enumerable.Range-Methodegeneriert eine Sequenz von ganzen Zahlen in einem angegebenen Bereich.
Hier von 0 bis n, also bis zur Länge des angegebenen Strings. --> 0,1,2,3,4,5,6,7,8,9...n Stellen
Ich möchte aber verschiedene Zahlen berechnen --> 34198567...
Die Addierrichtung soll weiters von rechts nach links gerichtet sein.
Ich habe daher die .Reverse-Methode versucht, einzubinden ... zeigt anscheinend keine Wirkung
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()
-
VB1963 schrieb:
Die Addierrichtung soll weiters von rechts nach links gerichtet sein.
???
a + b = b + a !!!
out of the hand:
summe = (from p in s where p.isnumber select cint(p)).sum
funzt im Prinzip also auch bei "1a2" ... wobei man überlegen muss, ob das Sinn macht -
...ich meine gewichtet addieren (stellenwertabhängig)
a*1 + b*2 + c*3 + ... + x*n --> (1-n) sind die Stellenwerte der Zahl
Da ist die Richtung aber schon wichtig.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()
-
VB.NET-Quellcode
- <System.Runtime.CompilerServices.MethodImpl(Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)>
- Private Function PostInc(ByRef i As Integer) As Integer
- Dim tmp = i
- i += 1
- Return tmp
- End Function
- Private Function quersumme(ByVal s As String) As Long
- Dim i As Integer = 1
- Return (From p In s.Reverse Where Char.IsNumber(p) Select Integer.Parse(p)).Sum(Function(n) As Integer
- Return PostInc(i) * n
- End Function)
- End Function
einer der wenigen Fälle, wo C lustiger wäre .... i++ -
-
VB1963 schrieb:
Ich habe daher die .Reverse-Methode versucht, einzubinden ... zeigt anscheinend keine Wirkung
das einfachste wärewohl, den String vorher umzudrehen
Also in eine Zeile gepuhlt geht auch:
Wäre aber auf jeden Fall eine Überlegung, ob die konventionelle Methode nicht leichter verständlich, schneller zu entwickeln, und ausserdem flexibler gegenüber wachsenden Anforderungen ist, als diese Kunststückchen mit Linq und anonymen Methoden:ABer die Kunststückchen sind auf jeden Fall eine gute Übung !Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
Ja, hier wurde aus Neugier zu einer kurz gehaltenen Funktion eine ganz schöne Gehirnschmalzübung
Hier muss man dann entscheiden, was einen gefällt und sinnvoll ist.
Aus Übersichtsgründen und Wartbarkeit würde ich mich wieder für meine ursprüngliche Version entscheiden.
Für eine ordentliche Wertübergabe (siehe Einwand von @petaod in Post#2)
hätte ich vor der Berechnung noch die Stringüberprüfung (Post#3) als zusätzliche Zeile eingefügt.
Danke nochmals an alle für die vielen Inputs
-
Ähnliche Themen
-
Melone - - Sonstige Problemstellungen
-
-
4 Benutzer haben hier geschrieben
- VB1963 (7)
- ErfinderDesRades (4)
- Gast (4)
- petaod (1)