Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA. Große Zahlen.

Forumthread: 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

Anzeige

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
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige