Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   LongInt zu kurz | array multiplizieren ? (https://www.delphipraxis.net/158912-longint-zu-kurz-%7C-array-multiplizieren.html)

roboter202 7. Mär 2011 21:06

LongInt zu kurz | array multiplizieren ?
 
Hallo,

ich möchte die Zahlenfolge 1,2,4,8,16,32,64,128,256 ... bis zur Zahl 9.999.999.999.999 generieren und in einer Listbox ausgeben das Problem ist das diese Zahl zu lang/groß für einen integer oder longint ist also habe ich an einen Array
Delphi-Quellcode:
array [1..13] of Integer
gedacht wo ich dann die Zahl Ziffer für Ziffer speichere

Bis jetzt hab ich

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i :longint;
begin
i := 1 ;
While i < 9999999999999 do
begin
Listbox1.Items.Add(inttostr(i));
i := i * 2 ;
Listbox1.Refresh ;
If i = 0 then
begin
showmessage('error');
exit ;
end;
end;
end;
mein Problem ist einen Integer kann ich mit 2 Multiplizieren wie mache ich das mit einem Array

Gruß Chrstian

Satty67 7. Mär 2011 21:28

AW: LongInt zu kurz | array multiplizieren ?
 
Gibt ja auch fertige BigInt Lösungen, aber wenn Du es mit dem Array lösen willst (Array of Byte würde ja reichen)

Ganz grob:

Jede Dezimal-Stelle (also jeden Array-Wert) einfach mit 2 multiplizieren. Von klein nach großer Stelle. DIV 10 zu größerer Stelle übertragen, MOD 10 behalten.
Code:
166
x2
-----
 12
12
2
=====
332
Der Einfachheit halber erst alle Array-Elemente multiplizieren (mehr als 19 kann es ja nicht werden, passt in ein Byte), danach DIV/MOD Behandlung von klein nach groß.

rollstuhlfahrer 7. Mär 2011 21:33

AW: LongInt zu kurz | array multiplizieren ?
 
Du kannst das ganze mal mit Int64 verwenden. Der sollte so groß sein, dass du dich locker darin austoben kannst. Wenn das nicht reicht, gibt es BCD (ob man dann noch die Grundrechenarten anwenden kann, weiß ich nicht) oder du besorgst dir eine Mathe-Unit, die sehr große und sehr genaue Zahlen ermöglicht.

Tipp für dich: mit 2 multiplizieren (wenns schnell gehen soll):
Delphi-Quellcode:
Zahl shl 1
.

Bernhard

roboter202 7. Mär 2011 21:34

AW: LongInt zu kurz | array multiplizieren ?
 
Hallo,

Zitat:

Zitat von Satty67 (Beitrag 1086650)
Gibt ja auch fertige BigInt Lösungen, aber wenn Du es mit dem Array lösen willst (Array of Byte würde ja reichen)

Ah Bignt-Lösungen wusste gar nicht das es das gibt danke für den Tipp werde es erstmal probieren DANKE

roboter202 7. Mär 2011 21:37

AW: LongInt zu kurz | array multiplizieren ?
 
Danke habe es mit Int64 probiert jetzt geht es

Satty67 7. Mär 2011 21:53

AW: LongInt zu kurz | array multiplizieren ?
 
Ach OK, das offensichtliche sehe ich mal wieder nicht.
Int64 hat natürlich auch einen ausreichenden Wertebereich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz