大家好!
急求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

解决方案 »

  1.   

    ....
    For i = 0 To 9
    xStr(i) = i
    ....
    改为:
    For i = 0 To 9
    xStr(i) = char(i+48)
      

  2.   

    Function tenTo33(x As Long) As String
    Dim i As Integer
    Dim tmp As Long
    Dim start As Boolean
    tmp = x
    Dim xStr(0 To 32) As String
    For i = 0 To 32
      Select Case i
        Case 0 To 9:   xStr(i) = Chr(i + 48)
        Case 10 To 17: xStr(i) = Chr(i + 55)
        Case 18 To 22: xStr(i) = Chr(i + 56)
        Case 23 To 27: xStr(i) = Chr(i + 57)
        Case 28 To 32: xStr(i) = Chr(i + 58)
      End Select
    Next i
    For i = 10 To 1 Step -1
      If Int(tmp / 33 ^ i) > 0 Then
        start = True
      End If
      If start Then
        tenTo33 = tenTo33 & xStr(Int(tmp / 33 ^ i))
        If Int(tmp / 33 ^ i) > 0 Then
          tmp = tmp - Int(tmp / 33 ^ i) * 33 ^ i
        End If
      End If
    Next i
    tenTo33 = tenTo33 & xStr(tmp)
    End Function
      

  3.   


    const arr: string ='0123456789ACDEFGHJKLMNPQRSTVWXYZ';function num33(n:integer) :char;
    begin
         num33:=arr[n];
    end;