![]() |
größerer Datentyp als Extended
Hallo zusammen,
ich bin gerade an meine Grenzen gestossen und zwar soll mein Programm ein Palindrom erstellen. Also sowas z.B. : 789 + 987 = 1776 ---------------------------------------------------------------- 1776 + 6771 = 8547 ---------------------------------------------------------------- 8547 + 7458 = 16005 ---------------------------------------------------------------- 16005 + 50061 = 66066 ---------------------------------------------------------------- ---------------------------------------------------------------- PALINDROM: 66066 Mein Problem ist nun, es kann natürlich sein das dass Palindrom so groß wird das es 1. nicht mehr in den Integer-Wert passt 2. nicht mehr in den Extended-Typ. Es wäre schön wenn Ihr mir helfen könntet!!! Gruß Muss!0 |
Re: größerer Datentyp als Extended
|
Re: größerer Datentyp als Extended
Ahh...Danke das ging echt schnell..
ehmmm...wie funktioniert das denn?? muss ich dann die Unit einbinden und dann auf die Funktionen darin zugreifen? Gruß Muss!0 |
Re: größerer Datentyp als Extended
Im Prinzip funktionieren die Units alle gleich. du bindest sie ein und kannst dann mit
Delphi-Quellcode:
oder ähnlich einen BigInt erstellen und mit den Funktionen die in der Unit deklariert sind damit rechnen, z.B.
Foo := TBigInt.Create('1234567890');
Delphi-Quellcode:
Das genaue verfahren ist allerdings von Unit zu Unit natürlich unterschiedlich ;)
Foo1.Add(Foo2)
|
Re: größerer Datentyp als Extended
ahh...jetzt hab ichs verstanden, also wie ich die
Units einbinde und im allgemeinen Nutze wusst ich schon nur leider konnte ich nichts damit anfangen wie ich diese BigInt-Unit nutze!!! Vielen Vielen Dank das hat mir sehr geholfen.... Gruß Muss!0 |
Re: größerer Datentyp als Extended
Suche mal nach meinem DECMath, das dürfte für dich intuitiver zu benutzen sein und bei weitem schneller als TBigInt in den mathm. Berechnungen.
![]() Aber mal ne andere Frage: Wie erzeugst du deine Palindrome mathematisch ? also mit welchem Algorithmus ? Ich frage weil du nämlich dafür garnicht rechnen musst, also garkeine BigInt/IInteger oder sowas benötigst. Betrachte mal deine Zahlen einfach als Strings die nur aus Ziffern bestehen können. Wir wissen zb. das wenn die Ziffern '5' +'3' = '8' erzeugt werden an letzter Stelle im String, das logischerweise an erster Stelle im String also eine '5' +'3' = '8' stehen muß. Dein Problem reduziert sich bei Strings mit gerader Länger also auf eine reine Spiegelung und eben die ausschließliche Berechnung von einzelnen Ziffern als Zeichen. Gruß Hagen |
Re: größerer Datentyp als Extended
Beispiel:
wir gehen Top-Down vor, also erzeugen per Zufall einen Zahlen String wie zb. "2345" und spiegeln diesen -> "2345" + "5432" ergibt "23455432". Nun wollen wir 2 Palindrome erzeugen die addiert exakt diese Zahl ergibt. Wir nehmen "12044021" und erzeugen "2" - "1" = "1" "3" - "2" = "1" "4" - "0" = "4" "5" - "4" = "1" unser Palindrom ist also "11411411" + "12044021" = "23455432", fertig ohne Berechnungen großer Zahlen. Klar dürfte sein das dieser einfach Algo. nicht alle Palindrome erzeugen kann, aber eben sehr viele und sehr große ohne aufwendige Zahlenberechnungen und auf direktem Wege ohne Trial&Error ! Gruß Hagen |
Re: größerer Datentyp als Extended
Hallo...
wenn ich doch nun 2345 habe als Integer bzw. überhaupt als Zahlwert kann ich diesen dann doch zur Laufzeit dann in einen String umwandeln diesen dann "umdrehen" und dann wieder in eine Zahl und diese dann addieren also dann: 2345 + 5432 = 7777 und nicht 23455432 sicher ist dies auch ein Palindrom ABER ein schriftlicher und nicht (wie ich es möchte einen mathematischen!!). Aber ich werde mich jetzt mal umsehen nach dieser DECMath und werde es damit probieren trotzdem vielen Dank!!! Gruß Muss!0 PS: Könnte ich nicht einfach ohne eine Zahlenwert-Variable zu nutzen 2 Strings nehmen und die einzelnen Stellen darin wie im dritten Schuljahr zusammenaddieren? Oder dürfte diese Methode zu langsam sein? :gruebel: Hatte was vergessen!! :wink: |
Re: größerer Datentyp als Extended
Zitat:
Aber sag mal, oben baust du ein Palindrom indem du sukzessive so lange gespiegelte Zahlen addierst bis ein echtes Palindrom entsteht. Ist dies Absicht und eine gundlegende Bedingung für deinen Algo ? Wenn nicht dann kanst du so ein Palindrom in jedem Falle direkt berechnen, das beduetet dann auch das du nur die gewünschte Anzahl an Ziffern eingibst und ein Palindrom per Zufall erzeugt würde, in einem Schritt. Bei deiner Methode kann es sehr sehr lange dauern bis man ein großes Palindrom erzeugt hat. Übrigens im DECMath DEMO findest du einen Algo. für Automorphe Zahlen, das sind Zahlen der Form X' = X^2 wobei alle Ziffern von X als Ziffern in X^2 enthalten sind. Zb.
Code:
Gruß Hagen
X = 42576 57676 91038 90995 89338 00226 07743 74008 17871 09376
X² = 18127 64889 37539 71252 85535 50988 19268 32151 66459 22506 42576 57676 91038 90995 89338 00226 07743 74008 17871 09376 |
Re: größerer Datentyp als Extended
Du könntest vorerst auch einfach einen Int64 verwenden, derreicht für die normalen Sachen bestimmt auch ... ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz