需求是這樣:
  有一串序號:比如: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,
不知道描述的是否清楚,現在就想請求各位指點一下這個算法該怎么寫!

解决方案 »

  1.   

    如果我需要連續的50個序號:
    KFP81204OM-0001
    KFP81204OM-0002
    KFP81204OM-0003
    KFP81204OM-0004
    KFP81204OM-0005
    KFP81204OM-0006
    ...
    KFP81204OM-000A
    KFP81204OM-000B
    ...
    KFP81204OM-000Z
    KFP81204OM-0010
    KFP81204OM-0011
    KFP81204OM-0012
    KFP81204OM-0013
    KFP81204OM-0014
    KFP81204OM-0015
    KFP81204OM-0016
    KFP81204OM-0018
    KFP81204OM-0019
    KFP81204OM-001A
    KFP81204OM-001B
    KFP81204OM-001C
    KFP81204OM-001D
    KFP81204OM-001E就是這樣..
    等待高手...
      

  2.   

    这种进制转换,用查表法最简单。
    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;
      

  3.   

    类似于十进制取二进制的一个算法.
    先定义一个数组: 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即为所求。
      

  4.   

    你这个应该是34进制吧 写了一个10进制转34进制的算法 看看,Digits是补齐长度function IntTo34(Value: Integer;Digits: Integer): string;
    const
      Key: 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');
    var
      FTmp,FTmp1:Integer;
    begin
     FTmp:=Value;
     while FTmp>0 do
     begin
       FTmp1:=FTmp mod 34;
       Result:=Key[FTmp1]+Result;
       FTmp:=(FTmp-FTmp1) div 34;
     end;
     FTmp:=Digits-Length(Result);
     if FTmp>0 then
       Result:=StringOfChar('0',FTmp)+Result;
    end;
      

  5.   

    大家好!
    急求10进制转33进制代码。
    就是我想在EXCLE中使用宏建一个自定义函数“tenTO33”
    33进制规则是:0、1、2、3、4、5、6、7、8、9、A、C、D、E、F、G、H、J、K、L、M、N、P、Q、R、S、T、V、W、X、Y、Z、10    字母:I、O、U不用,其余正常流水。下面是代码,但会出现重码现象(例如:十进制中66和2178算出的33进制结果都是20),请大家看看哪里出问题了,非常感谢!!!Function tenTo33(x As Long) As String
    Dim i As Integer
    Dim tmp As Long
    tmp = x
    Dim xStr(0 To 32) As String
    For i = 0 To 9
    xStr(i) = i
    Next i
    For i = 10 To 17
    xStr(i) = Chr(i + 55)
    Next i
    For i = 18 To 22
    xStr(i) = Chr(i + 56)
    Next i
    For i = 23 To 27
    xStr(i) = Chr(i + 57)
    Next i
    For i = 28 To 32
    xStr(i) = Chr(i + 58)
    Next i
    For i = 10 To 1 Step -1
    If Int(tmp / 33 ^ i) > 0 Then
    tenTo33 = tenTo33 & xStr(Int(tmp / 33 ^ i))
    tmp = tmp - Int(tmp / 33 ^ i) * 33 ^ i
    End If
    Next i
    tenTo33 = tenTo33 & xStr(tmp)
    End Function