![]() |
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 |
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:
|
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; |
AW: sehr große Zahlen MOD
Super
besten dank für die Vorschläge :-D |
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:
was mache ich falsch :?:
{$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; |
AW: sehr große Zahlen MOD
Zitat:
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 22:47 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