![]() |
Re: Exakte Addition langer Zahlen
Angepasst -> 16 ms bei 200.000 :(
Delphi-Quellcode:
MfG :P
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; |
Re: Exakte Addition langer Zahlen
Delphi-Quellcode:
Wat is das denn? :shock:
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; |
Re: Exakte Addition langer Zahlen
Verzierung :lol:
~inline ;) |
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: |
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 |
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: |
Re: Exakte Addition langer Zahlen
was ich die ganze zeit vergessen habe,
die programmsprache ist delphi win32 :thumb: |
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. |
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