Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Exakte Addition langer Zahlen (https://www.delphipraxis.net/131140-exakte-addition-langer-zahlen.html)

mr_emre_d 19. Mär 2009 20:15

Re: Exakte Addition langer Zahlen
 
Angepasst -> 16 ms bei 200.000 :(

Delphi-Quellcode:
function StrAddition( Str1, Str2: PString ): PString;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
const
  VN: set of char = [ '0'..'9' ];
var
  i, Carry, t: Integer;
  L, S: PString;
  B: String;
begin
  {valid numbers}
    for i := 1 to Length( Str1^ ) do
      if not ( Str1^[i] in VN ) then
        Exit;
    for i := 1 to Length( Str2^ ) do
      if not ( Str2^[i] in VN ) then
        Exit;
  {equate strings}
    if Length( Str1^ ) <> Length( Str2^ ) then
    begin
      L := Str1;
      S := Str2;
      if Length( Str1^ ) < Length( Str2^ ) then
      begin
        L := Str2;
        S := Str1;
      end;
      SetLength( B, Length( L^ ) - Length( S^ ) );
      FillChar( B[1], Length( L^ ) - Length( S^ ), '0' );
      S^ := B + S^;
    end;
  {maincode}
  New( Result );
  SetLength( Result^, Length( Str1^ ) );
  Carry := 0;
  for i := Length( Str1^ ) downto 1 do
  begin
    t        := ( ( PByte( @Str1^[i] )^ and 15 ) + ( PByte( @Str2^[i] )^ and 15 ) + Carry );
    Result^[i] := IntToStr( t mod 10 )[1];
    Carry    := t div 10;
  end;
  if Carry > 0 then
    Result^ := IntToStr(Carry) + Result^;
end;
MfG :P

Mithrandir 19. Mär 2009 20:24

Re: Exakte Addition langer Zahlen
 
Delphi-Quellcode:
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
  cdecl pascal near register far stdcall near far assembler; inline;
Wat is das denn? :shock:

mr_emre_d 19. Mär 2009 20:26

Re: Exakte Addition langer Zahlen
 
Verzierung :lol:

~inline ;)

ginimausi 24. Mär 2009 09:33

Re: Exakte Addition langer Zahlen
 
ne ich hab das programm immernoch nich^^
sin ja ganz schön lange texte :-O
danke für die antworten, aber ich glaube ich versteh es immernoch nich :-D
:roll: :gruebel: :roll: :shock:

Sherlock 24. Mär 2009 09:40

Re: Exakte Addition langer Zahlen
 
Immerhin biste ehrlich.
Hast Du Dir denn mittlerweile überlegt, wie man von Hand (also manuell) zwei Zahlen addiert? Ich denke mal, das solltest Du mit zwei Zahlen größer 100 machen, sonst geht das per Kopf zu einfach ;)

Wenn Du das hast, schreib es doch mal hier hin. Dann können wir gemeinsam schauen, wie das in Delphi zu überführen ist.

Edith hat total viele Fehler gefunden und einige korrigiert.

Sherlock

ginimausi 25. Mär 2009 10:09

Re: Exakte Addition langer Zahlen
 
ok
also nehmen wir mal die 182 und 321

ich rechne 182 + 321 ;
ich addiere nacheinander erst die einser, dann die zehner, dann die hunderter. usw.

aber wie mache ich das als programm= :drunken: :pale: :roll:

ginimausi 25. Mär 2009 10:12

Re: Exakte Addition langer Zahlen
 
was ich die ganze zeit vergessen habe,

die programmsprache ist delphi win32 :thumb:

DeddyH 25. Mär 2009 10:15

Re: Exakte Addition langer Zahlen
 
Die logische Vorgehensweise ist jetzt zig mal erklärt worden und Code wurde auch bereits reichlich gepostet. Was ist denn jetzt noch unklar?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Seite 5 von 5   « Erste     345   

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