用VBS精确计算2的100次方

标签: , , ,

即Grade school multiplication(小学乘法?)算法的VBS实现。既然Python可以计算2的100次方,那么我就要用VBS实现。不过这个效率嘛,计算2的10000次方Python用了0.009013秒,VBS用了120.9805秒,不是一个等级的,我就不多说什么了。

直接上代码:

'Date: 2010/10/27
'Author: Demon
'QQ: 380401911
'E-mail: still.demon@gmail.com

begin = Timer
n = 1
For i = 1 To 100
    n = multiple(n, 2)
Next
finish = Timer
WScript.Echo n
WScript.Echo finish - begin

'Grade school multiplication, Algorithm 14.12
'http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
Function multiple(byVal x, byVal y)
    Dim n, t, i, j, z, w()
    n = Len(x) - 1
    t = Len(y) - 1
    ReDim w(n + t + 1)
    
    x = CStr(x) : y = CStr(y)
    
    For i = 0 To UBound(w)
        w(i) = "0"
    Next    
    
    For i = 0 To t
        Dim c  : c = 0
        Dim uv : uv = 0
        
        For j = 0 To n
            uv = (w(i+j)-"0") + c + _
            (Mid(x,n-j+1,1)-"0") * (Mid(y,t-i+1,1)-"0")
            w(i+j) = CStr(uv Mod 10 + "0")
            c = uv \ 10
        Next
        
        w(i+n+1) = CStr(uv \ 10 + "0")
    Next
    
    z = Join(w,"")
    z = StrReverse(z)
    Do While Left(z,1) = "0"
        z = Mid(z,2)
    Loop
    
    multiple = z
End Function
赞赏

微信赞赏支付宝赞赏

随机文章:

  1. VB6拾遗:更高效的数组
  2. PHP中的gzcompress gzdeflate gzencode函数
  3. VBS中没有vbHide常量
  4. VBS转EXE工具:ScriptCryptor
  5. VBS和C语言效率比较

3 条评论 发表在“用VBS精确计算2的100次方”上

  1. 枫中残雪说道:

    今天看了你的这篇文章才突然发现,VBS并不直接支持位运算

  2. Simba说道:

    个人觉得,”小学乘法”,依照大陆习惯,也许译为”竖式乘法”也许更好。

  3. Bill说道:

    可以优化一下乘法函数,不用做100次乘法。
    比如:2^100=2^(2*50)=(2^2)^50

留下回复