請教一個33進制的算法
需求是這樣:
有一串序號:比如:KFP81204OM-0001
現在這串序號后面的0001就是一串33進制的.從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
也就是0001,0002,0003,0004,0005...000A,000B...000H,000J,000K,...000N,000P,000Q...000Z
然后是0010就是到Z后加1
26個字母里要去掉I和O,
不知道描述的是否清楚,現在就想請求各位指點一下這個算法該怎么寫!
[解决办法]
这种进制转换,用查表法最简单。
function DecTo34(iDec, iDigit: Integer): String;const C : array[0..33] of Char = ( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');begin Result := ''; while iDec >= 34 do begin Result := C[iDec mod 34] + Result; iDec := iDec div 34; end; Result := C[iDec] + Result; Result := StringOfChar('0', iDigit - Length(Result)) + Result;end;procedure TForm1.Button1Click(Sender: TObject);var i : Integer;begin for i := 1 to 50 do Memo1.Lines.Add('KFP81204OM-' + DecTo34(i, 4));end;
[解决办法]
类似于十进制取二进制的一个算法.
先定义一个数组: newArray: Array of ['0','1',....'z']
然后用源如A(设为十进制,如果不是十进制,则此算法不可用.),进制33如B.
步骤1:让x:= A div B, y:=A mod B ,也即是分别取余,取整.
步骤2:让y值从newArray中得到查应的字符.如z.然后赋值给结果串。result:=z+result(注:加的位置不对错。)
步骤3:取将在让A:=X,
步骤4:循环步骤1-3.最后得到的结子果result即为所求。