delphi – 给定值的基数为n的数字
发布时间:2020-12-15 09:20:39 所属栏目:大数据 来源:网络整理
导读:这是我用来从数字数组和基值生成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
这是我用来从数字数组和基值生成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值,如何为给定的基值(其中base> 1)生成ADigits数组? 2)如何确定代表给定UInt64值的给定基值(其中base> 1)的ADigits数组的长度? 解决方法
作为动态数组的函数实现…
uses math; type TDigits = Array of Byte; Function BaseNToInteger(const Digits: TDigits; Base: Integer): Cardinal; var i: integer; begin Result := 0; for i := High(Digits) DownTo Low(Digits) do Result := Base * Result + Digits[i]; end; Function IntegerToBaseN(Nr: Cardinal; Base: Integer): TDigits; var i: integer; function CeilAllways(const X: Extended): Integer; begin Result := Integer(Trunc(X)); if Frac(X) >= 0 then Inc(Result); end; begin SetLength(Result,CeilAllways(ln(Nr) / ln(Base))); for i := Low(Result) to High(Result) do begin Result[i] := Nr mod Base; Nr := Nr div Base; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |