Re: Summe als Quersumme auf 6 Ziffern zerlegen
Verfasst: 12.04.2012 12:21
Huch, tatsächlich. Das String-zusammenbauen dauert so lange. Ohne braucht meine Routine gerade mal 14 ms.
Und wenn wir schon am Optimieren sind.
Hier meine Routine mit einer Laufzeit von ca. 13 ms (Durchschnitt von 100 Durchläufen) und Stringgenerieren.
Und wenn wir schon am Optimieren sind.
Hier meine Routine mit einer Laufzeit von ca. 13 ms (Durchschnitt von 100 Durchläufen) und Stringgenerieren.

Code: Alles auswählen
startTime = ElapsedMilliseconds()
Define.i digits = 100000
Define.i checksum = 500000
Dim digit.i(digits - 1)
Define.i i, sum = 0
For i = 0 To digits - 1
digit(i) = Random(1000)
sum + digit(i)
Next
Define.f scale = checksum / sum
sum = 0
For i = 0 To digits - 1
digit(i) = Int(Round(digit(i) * scale, #PB_Round_Nearest)) % 10
sum + digit(i)
Next
While (checksum <> sum)
i = Random(digits - 1)
If (digit(i) < 9 And sum < checksum)
digit(i) + 1
sum + 1
ElseIf (digit(i) > 0 And sum > checksum)
digit(i) - 1
sum - 1
EndIf
Wend
Define.s result.s = Space(digits)
Define.Character *c = @result
For i = 0 To digits - 1
*c\c = digit(i) + '0'
*c + SizeOf(Character)
Next
time = ElapsedMilliseconds() - startTime
MessageRequester("Quersumme", "Zeit: " + Str(time) + #CRLF$ + Left(result, 100) + "...")