
程式如圖。
目的把十進制的值轉成N進制。
原始碼如下:
點擊按鈕后在按鈕事件
sSeq:=GetSeqByCarry(iNum,iJinZhi,iLength,sFormat);
lbResult.caption:=sSeq;
GetSeqByCarry(十進制值,需要轉的進制,需要顯示的長度,目標進制的取值范圍)
function GetSeqByCarry(iSeq, iCarry,iLength: Integer; sFormat: string): string; //秈鑼ヴ種秈
var
iMod: Integer;
begin
Result := '';
iMod := 0;
if (iSeq = 0) then
Result := '0'
else
begin
while(iSeq > 0 ) do
begin
iMod := iSeq mod iCarry;
Result := sFormat[1 + iMod] + Result; //很關鍵的部分具體思路見下圖
iSeq := iSeq div iCarry;
end;
end;
//拼接長度 這里不展示了
end;

有好的經驗大家互相交流分享。可以在下面留言。
uj5u.com熱心網友回復:
16進制以內的任意進制用的地方不多, 建議增加16進制以上的支持, 比如62進制 (26 * 2 + 10) 之類的, 演算法一樣, 主要是增加字符范圍的控制
procedure TForm1.Button1Click(Sender: TObject);
const
Keys: array[0..61] of AnsiChar = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
MAX_RCOUNT = 64;
var
x, lCount: uint8;
lNum, lM: UInt64;
lStr, lResult: AnsiString;
begin
lNum := Random(10000000);
x := Random(62 - 16) + 16;
Memo1.Lines.Clear;
Memo1.Lines.Add('進制: ' + x.ToString);
Memo1.Lines.Add('10進制: ' + lNum.ToString);
SetLength(lStr, MAX_RCOUNT);
lCount := 0;
while lNum >= x do
begin
lM := lNum mod x;
lStr[MAX_RCOUNT - lCount] := Keys[lM];
Inc(lCount);
lNum := lNum div x;
end;
lStr[MAX_RCOUNT - lCount] := Keys[lNum];
Inc(lCount);
SetLength(lResult, lCount);
Move(lStr[MAX_RCOUNT - lCount + 1], lResult[1], lCount);
Memo1.Lines.Add(Format('%d進制: %s', [x, lResult]));
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/32583.html
標籤:語言基礎/算法/系統設計
上一篇:如何去模擬一個tcp連接協議(比如斗魚直播網站的人氣)
下一篇:delphi如何讀取csv格式
