空心雨毕业论文网提供毕业论文、职称论文、硕士论文、计算机论文等的代写服务,同时还提供各种期刊论文的发表。如果你有需要,请联系我们QQ:5599630;电话:13350726595;E-mail:singlehearted@vip.qq.com
RSS
 

巧用数组实现长整数的精确计算(2)

来源:okxy168 作者:

源程序如下:

Dim a(), b(), c() As Byte '定义输入和输出数组
Sub Main()
ts = "整数乘法"
xx = InputBox("请输入被乘数:", ts)
If xx = "" n End
yy = InputBox("请输入乘数", ts)
If yy = "" Then End
a1 = Len(xx) '取xx的位数
b1 = Len(yy) '取yy的位数
c1 = a1 b1 '确定结果的最大位数
ReDim a(a1), b(b1), c(c1) '重定义数组
For i = 1 To a
a(i) = Mid(xx, a1 - i 1, 1) '给数组a的每一位赋值
If Not IsNumeric(a(i)) Then '检查输入的合法性
MsgBox "被乘数输入错误", , ts
End
End If
Next i
For i = 1 To b1
b(i) = Mid(yy, b1 - i 1, 1) '给数组b的每一位赋值
If Not IsNumeric(b(i)) Then '检查输入的合法性
MsgBox "乘数输入错误", , ts
End
End If
Next i
For i = 1 To c1 '结果数组c初始化
c(i) = 0
Next i
For i = 1 To b1 '取b中的每一位
For j = 1 To a1 '取a中的每一位
c(j i - 1) = c(j i - 1) b(i) * a(j) '相乘结果累加到c中的相应位
zz = c(j i - 1)
k = 0
Do While zz >= 10 'c中的每一位进位检查
c(j i k - 1) = zz Mod 10 '本位处理
c(j i k) = c(j i k) zz \ 10 '进位处理
zz = c(j i k)
k = k 1
Loop
Next j
Next i
zz = ""
For k = c1 To 1 Step -1
If c(k) <> 0 Then Exit For '去掉结果中的前导0
Next k
k = IIf(k < 1, 1, k)
For i = k To 1 Step -1
zz = zz Trim(Str(c(i)))
Next i
zz = xx " X " yy " = " zz
ts = "计算结果: " Str(a1) "位 X " Str(b1) "位 结果为" Str(k) "位"
MsgBox zz, , ts '算式和结果输出
End
End Sub
以上程序在vb6.0上编译通过,并且能正确计算254位乘254位的长整数,输出结果为508位长整数,精确到每一位。
5、结束语
上这个算法可以计算任意位数的整数乘法,本程序为了说明算法,只设计了一个模块,没有使用到窗体。使用的是vb中的标准输入输出函数。所以它能处理的结果位数位508位,因为超过254位的数据不能输入了。要增加处理位数,只需要增加一个窗体,把输入和输出放在窗体上就可以了,实际上还可以用多个字符串连接,这样能计算的位数就没有限制了,而且当所处理的位数超过数组的最大定义范围时还可以用多维数组。总之,只要采用一定的方法,可以计算任意长度的数字。
把本程序稍做修改,可以做成一个自定义函数,把两个输入参数作为函数的参数,在其他地方调用本函数就可以计算任何整数的阶乘(n!),也可以计算任何整数的整数次方(n^m)。
本文给出的算法能给我们一种编程思路,也给我们一种启示,即只要我们充分利用计算机的功能和特性,有些看来是不可能实现的计算处理,通过一定的转换,我们总能找到解决的方法。


Visual Basic 6.0 中文版实用参考手册——语句、函数、对象与篇.晶辰工作室. 出版社, 1998
Visual Basic 6.0 中文版控件大全. 李玉东,李罡,李雷. 电子工业出版社, 2000
数据结构. 刘良观,黄水松. 武汉大学出版社, 2000

阅读更多内容<<上一页 · 1 · 2
1
最新评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
      本站是由一个众多学科的博士群体组建而成,主要创办者为成都各重点高校博士。本论文网内理工科写手均为博士,文科类写手大部分为博士,且领域涵盖广泛,写作势力强大,若有部分专业,没有相关的写手,我们给你寻找合适的写手! 依托强大的人力资源,我们本着诚心交流的宗旨,专门为您排解写作上的难题。从在科研及实践工作中稳扎稳打的经历,我们具备了研究问题,解决问题的能力。论文写作和论文发表,作为教育体系的一个重要环节,我们确实有能力给您解决好问题,正所谓,真金不怕火来炼,请相信我们的势力,没有把握的事,我们不会做!
      本站受多家期刊委托,其中包括国家级中文核心期刊目录正刊,CSSCI目录正刊,增刊,省级以上公开出版的优秀期刊正刊,本站负责论文推荐发表,加急1个月即可发表。本站负责论文发表,不发表承诺退款!!目前主要负责法律,管理,经济,理工,农学,行政,医学,艺术,英语等类论文发表论文代写。详细期刊目录见本站相关内容。
赞助商链接