Was er macht, ist eigentlich ein mod auf div aufgepäppelt.
Auch dieses merkwürdige shl. Und am Anfang dache ich, er macht D shl -S, aber das fängt er ab.
Anyway, jedenfalls vielen Dank für dein Feedback und den Link.
Gruß
Thomas
Delphi-Quellcode:
procedure HugeInt_Mod(A, B: HugeInt; var R: HugeInt);
begin
HugeInt_DivMod(A, B, R);
Move(A, R, SizeOf(HugeInt));
end;
Edit: So würde es mir fast schon reichen:
Delphi-Quellcode:
function HugeIntModInteger(A: HugeInt; B: integer): integer;
var
Q: HugeInt;
I: integer;
begin
Result:= 0;
FillChar(Q, SizeOf(HugeInt), 0);
I:= HugeIntSize-1;
while (I > 0)
and (A[I] = 0)
do Dec(I);
while I >= 0
do
begin
Result:= 256*Result + A[I];
if I > 0
then
begin
Move(Q[0], Q[I], HugeIntSize-I);
FillChar(Q[0], I, 0);
end;
Q[0]:= Result
div B;
Result:= Result
mod B;
Dec(I);
end;
end;
function HugeIntDivInteger(A: HugeInt; B: integer): HugeInt;
var
Q: HugeInt;
I, R: integer;
begin
R:= 0;
FillChar(Q, SizeOf(HugeInt), 0);
I:= HugeIntSize-1;
while (I > 0)
and (A[I] = 0)
do Dec(I);
while I >= 0
do
begin
R:= 256*R + A[I];
if I > 0
then
begin
Move(Q[0], Q[I], HugeIntSize-I);
FillChar(Q[0], I, 0);
end;
Q[0]:= R
div B;
R:= R
mod B;
Dec(I);
end;
Move(Q, A, SizeOf(Q));
Result:= A;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(HugeIntToStr(HugeIntDivInteger(IntToHugeInt(50331648), 3)));
ShowMessage(IntToStr(HugeIntModInteger(IntToHugeInt(50331648), 3)));
end;