首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

請教1個33進制的算法

2012-06-29 
請教一個33進制的算法需求是這樣:有一串序號:比如:KFP81204OM-0001現在這串序號后面的0001就是一串33進制

請教一個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即为所求。

热点排行