vb 怎么把36进制转换成 10 进制
vb 怎么把36进制转换成 10 进制 --------------------编程问答-------------------- 使用Select来实现 --------------------编程问答-------------------- 跟十六进制的方式差不多吧,根据进制的权值和位数进行转换
100进制转10进进制也是类似的方法 --------------------编程问答--------------------
Dim basestr As String--------------------编程问答-------------------- 貌似C有个函数可以直接转换 --------------------编程问答--------------------
Dim n36 As String
Dim n As Long
Dim L As Long
Dim i As Long
basestr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
n36 = "Z7"
n = 0
For i = 1 To Len(n36)
n = n * 36 + (InStr(basestr, Mid(n36, i, 1)) - 1)
Next
Debug.Print n '1267
Select很烦琐,效率也低吧? --------------------编程问答--------------------
哪里?100 进制转 10 进制可以有更便捷的算法。就像十六进制转二进制不需要传统算法一个道理。
--------------------编程问答-------------------- http://topic.csdn.net/u/20120601/13/f3f69e62-0928-43e5-aa7a-2ba93d9ce0ec.html
不会是同一个老师的作业吧。
改一下字符串常量和进制常数40就变成不同的进制转换了。
--------------------编程问答--------------------
cout<<strtol("z",NULL,36)<<endl;
输出35 --------------------编程问答--------------------
转换是有通用的基本算法,但要根据数据的大小和类型选择不同的具体实现。
如果数字大小不超过 Long,就较为简单,否则可能涉及到超长数字的处理。
--------------------编程问答--------------------
Option Explicit
Private Sub main()
Dim s As String
s = "g9z3"
Debug.Print strtodec(s)
End Sub
Function strtodec(s As String) As Long
Dim i As Integer, st As String, slen As Integer
s = LCase(s)
slen = Len(s)
For i = slen To 1 Step -1
st = Mid(s, i, 1)
strtodec = strtodec + IIf(IsNumeric(st), st, Asc(st) - 87) * 36 ^ (slen - i)
Next
End Function
看看这个方法如何,不过要注意溢出,自己写的函数。 --------------------编程问答-------------------- 怎么再从十进制转换36 --------------------编程问答-------------------- 10->36
依次整除36,将余数排列起来就可以了。
36->10
每一位乘以36^n(n是位数),再相加。
这么简单的问题,教科书上就有。上过学的都会。 --------------------编程问答-------------------- 举两个例子,看明白了自己思考把程序写出来。
(1)(12)(34)转换成10进制:
1 x 36^2 + 12 x 36^1 + 34 x 36^0 = 1 x 1296 + 12 x 36 + 34 x 1 = 1296 + 432 + 34 = 1762
将1762转换为36进制:
1762 / 36 = 48 ... 34
48 / 36 = 1 ... 12
1 / 36 = 0 ... 1
0 / 36 = 0 ... 0
所以1762就是(0)(1)(12)(34)也就是(1)(12)(34)。
补充:VB , COM/DCOM/COM+