读书人

教133制的算法

发布时间: 2012-06-29 15:48:46 作者: rapoo

教一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,
不知道描述的是否清楚,在就想求各位指一下算法怎么!


[解决办法]
这种进制转换,用查表法最简单。

Delphi(Pascal) code
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即为所求。

读书人网 >.NET

热点推荐