请csdn超高手帮忙
<%
'十进制转任意进制
'n = 数字
'x = 进制,最大63进制
Public Function BaseX(ByVal n, ByVal x)
Dim t, m
If n <> 0 Then
t = t & BaseX(n \ x, x)
m = n Mod x
If m < 10 Then
t = t & m
Else
t = t & Chr(m + 65 - 10)
End If
End If
BaseX = t
End Function
'任意进制转十进制
's = 进制字符串
'x = 进制
Public Function ConvertX(ByVal s, ByVal x)
Dim i, l
Dim t, p
Dim u
l = Len(s)
t = 0
p = 1
For i = l To 1 Step -1
u = Asc(Mid(s, i, 1)) And &HFF
If u > = 48 And u <= 57 Then
u = u - 48
ElseIf u > = 65 And u <= 90 Then
u = u - 65 + 10
ElseIf u > = 97 And u <= 122 Then
u = u - 97 + 10
End If
t = t + u * p
p = p * x
Next
ConvertX = t
End Function
Dim s
s = BaseX(1200, 36)
Response.Write s & " <br/> "
Response.Write ConvertX(s, 36) & " <br/> "
%>
当s= BaseX(1200, 36)里面的取值比较小的时候程序完全正确,
当把s= BaseX(1200, 36)改为s= BaseX(22399684340, 36)甚至数值更大的时候就会出现溢出,把n改问CDbl型还是不能解决问题
------解决方案-------------------- 'Double 整除
Public Function dix(ByVal n1, ByVal n2)
Dim ret, pos
Dim tmp
If n1 > = -2147483648 And n1 <= 2147483647 Then
ret = n1 \ n2
Else
tmp = n1 / n2
pos = InStr(tmp, ". ")
If pos > 0 Then
ret = CDbl(Mid(tmp, 1, pos - 1))
Else
ret = tmp
End If
End If
dix = ret
End Function
'Double 求余
Public Function mox(ByVal n1, ByVal n2)
Dim ret, pos
Dim tmp
If n1 > = -2147483648 And n1 <= 2147483647 Then
ret = n1 Mod n2
Else
tmp = n1 / n2
pos = InStr(tmp, ". ")
If pos > 0 Then
ret = CDbl(Mid(tmp, 1, pos - 1))
Else
ret = tmp
End If
ret = n1 - n2 * ret
End If
mox = ret
End Function
'十进制转任意进制
'n = 数字
'x = 进制,最大63进制
Public Function BaseX(ByVal n, ByVal x)
Dim t, m
If n > 0 Th