Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi sehr große Zahlen MOD (https://www.delphipraxis.net/175516-sehr-grosse-zahlen-mod.html)

Texas 27. Jun 2013 16:21

sehr große Zahlen MOD
 
Hallo,

ich versuche gerade eine 24 Stellige Zahl mit MOD zu berechnen. Leider ohne erfolg. Ich benötige die Berechnung für die IBAN Prüfzahl um meine alten Kontonummern und BLZ's auf
SEPA-Umzustellung.

Weiß jemand wie man so große Integerzahlen berechnen kann oder gibt es einen Intergertype der so große Zahlen verwaltet. bzw gibt es einen andere möglichkeit für so eine Berechnung?

Viele Grüße

Michael

MrMooed 27. Jun 2013 16:34

AW: sehr große Zahlen MOD
 
Vielleicht sind BigInteger genau das was du suchst - wobei die bei "nur" 24 Stellen vielleicht etwas zu überdimensioniert sind :wink:

Uwe Raabe 27. Jun 2013 17:51

AW: sehr große Zahlen MOD
 
Ich vermute, die Zahl liegt als String vor. Dann kannst du die sogar Zeichenweise abarbeiten. Es gilt nämlich
Delphi-Quellcode:
(a + b) mod c = ((a mod c) + (b mod c)) mod c


Solange der Divisor noch als Integer darstellbar ist und damit das Ergebnis zwangsläufig auch, tut es auch somit folgende Funktion:
Delphi-Quellcode:
function LongMod(const Zahl: string; Divisor: Integer): Integer;
var
  Ch: Char;
begin
  Result := 0;
  for Ch in Zahl do begin
    Result := (10*Result + Ord(Ch) - Ord('0')) mod Divisor;
  end;
end;

Texas 28. Jun 2013 05:02

AW: sehr große Zahlen MOD
 
Super
besten dank für die Vorschläge :-D

Texas 28. Jun 2013 11:55

AW: sehr große Zahlen MOD
 
irgendwo mache ich was falsch

beim aufrufen der funktion gibt es folgende fehlermeldung

[Fehler] Unit1.pas(38): Operator ist auf diesen Operandentyp nicht anwendbar
in zeile 38 steht
for Ch in Zahl do begin


Delphi-Quellcode:
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  i := LongMod('210501700012345678131400',97)
end;

function TForm1.LongMod(const Zahl: string; Divisor: Integer): Integer;
var
  Ch: Char;
begin
  Result := 0;
  for Ch in Zahl do begin
    Result := (10*Result + Ord(Ch) - Ord('0')) mod Divisor;
  end;
end;
was mache ich falsch :?:

Uwe Raabe 28. Jun 2013 12:07

AW: sehr große Zahlen MOD
 
Zitat:

Zitat von Texas (Beitrag 1219925)
was mache ich falsch :?:

Ganz einfach: du verwendest eine zu alte Delphi-Version :wink:

Delphi-Quellcode:
function TForm1.LongMod(const Zahl: string; Divisor: Integer): Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := 1 to Length(Zahl) do begin
    Result := (10*Result + Ord(Zahl[I]) - Ord('0')) mod Divisor;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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