标题: 用VBS精确计算2的100次方
作者: Demon
链接: https://demon.tw/programming/vbs-long-multiplication.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
即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
微信赞赏支付宝赞赏
随机文章:
今天看了你的这篇文章才突然发现,VBS并不直接支持位运算
个人觉得,”小学乘法”,依照大陆习惯,也许译为”竖式乘法”也许更好。
可以优化一下乘法函数,不用做100次乘法。
比如:2^100=2^(2*50)=(2^2)^50