设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4908|回复: 8
打印 上一主题 下一主题

[高7] 26进制乘法

[复制链接]
跳转到指定楼层
1#
发表于 2005-8-4 18:30:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设某系统使用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编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2005-8-4 19:38:00 | 只看该作者
数学和算法的问题,我一看就要晕,以前没学好.只看trynew了
3#
发表于 2005-8-4 22:24:00 | 只看该作者
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]
4#
发表于 2005-8-4 23:24:00 | 只看该作者
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编辑过]

5#
 楼主| 发表于 2005-8-4 23:33:00 | 只看该作者
第一天就有两份答案了哈!高兴高兴!

目前测试结果:

海狸:0.019毫秒

lwwvb:0.050毫秒

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

6#
发表于 2005-8-10 23:27:00 | 只看该作者
请参考以下文章及其相关文章:



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

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



7#
发表于 2005-8-17 21:37:00 | 只看该作者
新手请问海狸先生~bytStrIn = StrReverse(strf)

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

怎么理解?  字符串是以何种形式储存在数组bytStrIn里的~~为什么是Step 2谢谢[em06]
8#
 楼主| 发表于 2005-9-28 01:38:00 | 只看该作者
以下是引用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位。
9#
发表于 2006-12-4 05:59:00 | 只看该作者
一山还有一山高啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-14 14:32 , Processed in 0.092278 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表