Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1104to1108
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA. Große Zahlen.

VBA. Große Zahlen.
alifa
Hallo Forum,
Wie geht das mit größeren Zahlen, etwa bis n*10^25 (n von 1 bis 9). Bei diesem Makro wird Überlauf gemeldet, die gesuchte Zahl wird wohl größer sein! (N, imMakro: a)
Gruß, Erhard
'Ich suche eine natürliche Zahl N und ihren Nachfolger N+1. S(N) ist gleich der Quersumme
'(Summe aller Ziffern) von N, und S(N+1) ist die Quersumme der Zahl N+1.
'Welches ist die kleinste Zahl N, so dass sowohl S(N) als auch S(N+1) durch 7 teilbar sind
Sub ZweiAufeinanderFolgendeZahlenGesucht()
Dim a&, z%, t!
t = Timer
For a = 1000 To 2500000000
If Quersumme(a) Mod 7 = 0 And Quersumme(a + 1) Mod 7 = 0 Then
Cells(z + 1, 1) = a
z = z + 1
End If
Next
MsgBox " fertig in" & Round(Timer - t, 2) & " Sek"
End Sub

Public Function Quersumme(ByVal Zahl As Long) As Long
Dim nQuersumme As Long
Do While Zahl  0
nQuersumme = nQuersumme + (Zahl Mod 10)
Zahl = Zahl \ 10
Loop
Quersumme = nQuersumme
End Function

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
69999 + 70000 ?
19.09.2009 13:35:12
ransi
HAllo
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Public Sub test()
Dim Zahl As Variant
Zahl = "9999999999999999999999999999"
Dim L As Variant
For L = 1 To Zahl
    If quersumme(CDec(L)) Mod 7 = 0 Then
        If quersumme(CDec(L + 1)) Mod 7 = 0 Then
            MsgBox "Treffer bei " & L
            Exit Sub
        End If
    End If
Next
End Sub


' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function quersumme(z As Variant)
z = CDec(z)
Dim i As Integer
For i = 1 To Len(z)
    quersumme = quersumme + Int(Mid(z, i, 1))
Next
End Function


ransi
Anzeige
AW: VBA. Große Zahlen.
19.09.2009 17:14:52
fcs
Hallo Erhard,
der Bereich für Zahlen vom Typ Long ist -2.147.483.648 bis 2.147.483.647 deswegen der Überlauf als Fehlermeldung.
Du hast vergessen, den Ausgang aus der For-Next-Schleife einzubauen, wenn die Zahl gefunden wird.
Gruß
Franz
So Funktionierts. Da nur Zahlen mit Endziffer 9 und 0 als Lösung in Frage kommen - bei allen andern ist die Differenz der Quersumme 2er aufeinander folgender Zahlen =1 und somit sind nicht beide Quersummen durch 7 teilbar- kann man die Schleife beschleunigen, indem man von 9 in 10er-Schritten hochzählt. Rechenzeit, je nach Rechner-Power ca. 0,1 Sekunden.
Sub ZweiAufeinanderFolgendeZahlenGesucht()
Dim a&, z&, t!
t = Timer
For a = 9 To 2100000000# Step 10
If Quersumme(a) Mod 7 = 0 And Quersumme(a + 1) Mod 7 = 0 Then
Cells(z + 1, 1) = a
z = z + 1
Exit For
End If
Next
MsgBox " fertig in " & Round(Timer - t, 2) & " Sek," _
& "   Zahl: " & a
End Sub

Anzeige
AW: VBA. Große Zahlen.
19.09.2009 20:53:51
alifa
Danke für eure Hilfe! Ich soll auch größere Zahlen (größer als 7) in das Makro einbauen. Also die 7 einfach ersetzen. Dann bleibt die Überlegung mit Step 10 gültig. Die gesuchte Zahl a wird viele (n) Mal die 9 enthalten.
((b-1)+n*9)/b mod b=0; Das Beispiel mit b=7: 6+n*9 Mod 7=0. Mit n=4 Quersumme=42.
a=69999; a+1=70000; Das passt!
Gruß, Erhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige