Office中国论坛/Access中国论坛

标题: [高7] 26进制乘法 [打印本页]

作者: LucasLynn    时间: 2005-8-4 18:30
标题: [高7] 26进制乘法
假设某系统使用26进制,分别使用大写英文字母A-Z代表十进制的0-25。



现有两个26进制数值A和B,用字符串表示分别为strA和strB。请用VBA求A和B的积。



备注:

1、A和B以及AB之积均不超过10进制21亿,也就是均在Long类型的范围之内

2、评判标准包含:算法效率、代码合理性、代码可读性、算法可扩展性。不必追求最短代码。

3、程序框架如下,其中...部分为题目所求部分:



Public Sub Main()

    Dim strA As String

    Dim strB As String

    Dim strC As String



    strA="JEK"

    strB="SLK"



    ....



    Debug.Print "A*B=" & strC

End Sub

[此贴子已经被作者于2005-8-4 14:13:23编辑过]


作者: tmtony    时间: 2005-8-4 19:38
数学和算法的问题,我一看就要晕,以前没学好.只看trynew了
作者: lwwvb    时间: 2005-8-4 22:24
Function Ten2Abc(f As Long) As String

  Dim x(100) As Integer

  Dim k As Integer

  Dim y As Long

  Dim i As Integer

  Dim s As String

  

  If f = 0 Then k = 1

  y = f

  Do While y > 0

    x(k) = y Mod 26

    k = k + 1

    y = y \ 26

  Loop

  

  For i = k - 1 To 0 Step -1

    If x(i) = 0 Then

      s = s + "A"

    Else

      s = s + Mid("BCDEFGHIJKLMNOPQRSTUVWXYZ", x(i), 1)

    End If

      

  Next i

  Ten2Abc = sEnd FunctionFunction Abc2Ten(s As String) As Long

  Dim x(100) As Integer

  Dim k As Integer

  Dim i As Integer

  Dim T As Long

  

  For i = 1 To Len(s)

    x(k) = InStr(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", Mid(s, i, 1)) - 1

    k = k + 1

  Next i

  

  For i = k - 1 To 0 Step -1

    T = T + x(i) * 26 ^ (k - i - 1)

  Next i

  

  Abc2Ten = T

  

End Function

DEBUG.print TEN2ABC(abc2ten("JEK")*ABC2TEN("SLK"))简单吧.[em05]
作者: 海狸先生    时间: 2005-8-4 23:24
Private Sub Command0_Click()

Dim A As String, B As String

A = "JEK"

B = "SLK"

MsgBox C10T26(C26T10(A) * C26T10(B))

End Sub

Private Function C26T10(strf As String) As Long

Dim bytStrIn() As Byte, i As Integer

bytStrIn = StrReverse(strf)

For i = LBound(bytStrIn) To UBound(bytStrIn) Step 2

    C26T10 = C26T10 + (bytStrIn(i) - 65) * 26 ^ (i / 2)

Next

End Function

Private Function C10T26(lngf As Long) As String

Do Until lngf = 0

    C10T26 = Chr(65 + (lngf Mod 26)) & C10T26

    lngf = lngf \ 26

Loop

End Function

[此贴子已经被作者于2005-8-4 15:38:26编辑过]


作者: LucasLynn    时间: 2005-8-4 23:33
第一天就有两份答案了哈!高兴高兴!

目前测试结果:

海狸:0.019毫秒

lwwvb:0.050毫秒

[此贴子已经被作者于2005-8-4 16:06:03编辑过]


作者: cg1    时间: 2005-8-10 23:27
请参考以下文章及其相关文章:



    新手来看:如何进行二进制到六十二进制向十进制的转换?

    http://access911.net/?kbid;71FAB61E13DCE8F3




作者: draculaxi    时间: 2005-8-17 21:37
新手请问海狸先生~bytStrIn = StrReverse(strf)

For i = LBound(bytStrIn) To UBound(bytStrIn) Step 2

怎么理解?  字符串是以何种形式储存在数组bytStrIn里的~~为什么是Step 2谢谢[em06]
作者: LucasLynn    时间: 2005-9-28 01:38
以下是引用draculaxi在2005-8-17 13:37:00的发言:



新手请问海狸先生~

bytStrIn = StrReverse(strf)

For i = LBound(bytStrIn) To UBound(bytStrIn) Step 2



怎么理解?  字符串是以何种形式储存在数组bytStrIn里的~~

为什么是Step 2

谢谢[em06]

Unicode形式,一个字符2位。
作者: okmijn    时间: 2006-12-4 05:59
一山还有一山高啊




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3