これは、数字の配列とベース値から UInt64 の結果を生成するために使用する関数です。
function BaseNToInteger(const ABase: Cardinal; const ADigits: Array of Byte): UInt64;
var
i: Integer;
begin
Result := 0;
for i := 0 to (Length(ADigits) - 1) do begin
Result := Result + (ADigits[i] * Power(i, ABase));
end;
end;
[Power() 関数については心配しないでください。カーディナルを使用して UInt64 の結果を生成する独自のコードを作成しました。]
これは簡単な部分です。
私の数学のスキルは長年にわたって錆びているように見えるので、私が苦労している難しい部分は次のとおりです。
1) 特定の UInt64 値に対して、特定のベース値 (ベースが > 1) の ADigits 配列を生成するにはどうすればよいですか?
2) 特定の UInt64 値を表す特定のベース値 (ベースが > 1 の場合) の ADigits 配列の長さを決定するにはどうすればよいですか?