1. 当计算机程序中无法用普通数据类型表示位数较多的乘数和计算结果时,就需要采用高精度乘法。如:当两个各有20位数字的整数相乘时,就无法用长整型(Long)数据类型来表示。高精度乘法运算就是运用数组,用程序模拟列竖式计算的过程。两个正整数进行高精度乘法计算的一般算法如下:

⑴将第一个整数各位上的数字按照从低位到高位的顺序依次存入数组a(1)、a(2)、…、a(La)中,将另一个整数各位上的数字按照从低位到高位的顺序依次存入数组b(1)、b(2)、…、b(Lb)中。其中,La表示第一个整数的位数,Lb表示第二个整数的位数;

⑵按照从低位到高位的顺序,将两个整数各位数值进行逐位乘法计算(第一轮先让b(1)依次乘以a(1)、a(2)、…、a(La),第二轮再让b(2)依次乘以a(1)、a(2)、…、a(La),依次进行),每位的乘法结果也按照低位到高位的顺序依次存入数组ans(1)、ans(2)、ans(3)…中;

⑶对数组ans中的计算结果进行从低位到高位的进位处理;

⑷统计数组ans中实际计算结果的有效数值位数,并将位数值存入变量length;

⑸按照高位到低位的顺序输出数组ans中的计算结果。

小强按照上述方法设计了一个两数进行高精度乘法计算的VB程序,功能如下:在文本框Text1和Text2中依次输入两个整数,单击“计算”按钮Command1,程序进行高精度乘法计算,并在标签Label4中输出计算结果。下面信息显示了进行高精度乘法计算的主要过程(假设输入的两个整数分别为“123”和“45”):

图a

图b

程序运行效果如图所示。

图c

实现上述功能的VB程序如下:

(1) 请在划线处填入合适代码。

Dim a(1 To 30)As Integer, b(1 To 30) As Integer, ans (1 To 60) As Integer

Dim La As Integer, Lb As Integer, length As Integer

Private Sub Command1_Click()

Dim i As Integer, j As Integer, t As Integer, temp As String

'将两个乘数(正整数)各数位上的数字按照上述算法依次存入数组a和b,每个正整数位数分别保存到变量La和Lb;将保存结果的数组ans(i)值初始化为零(该部分程序代码略)

For i=1 To Lb   

For j=1 To La

ans(i+j-1) =

Next j

Next i

For i=1 To La+Lb  

ans(i+1)=ans(i+1)+ans(i)\10

ans(i)=

Next i

length=La+Lb

Do While ans(length)=0

length=length-1

Loop

For i= To 1 Step -1

Label4.Caption=Label4.Caption&Str(ans(i))

Next i

End Sub

(2) 根据本题算法,若输入的两个整数分别为5125和18,则在输出乘法计算结果时,变量length的值为
【考点】
常见数据类型、数组;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
真题演练
换一批
2. 有n个从小到大排列的正整数依次存储在数组a中,另有m(m<n)个正整数存储在数组b中。现要求只保留上述n+m个数据中从小到大排列的前n个数据,并依次存入数组a中,其余数据被剔除。

小李为了解决该问题,首先结合数组a的有序性,找出a,b两个数组中要剔除的m个数据,再将数组b中保留的数据插入到数组a中。示例如下:

n=10,数组a:2,4,6,8,10,12,14,16,18,20

m=5,数组b:41 , 11,17 , 29,9

处理后的数组a:2,4,6,8,9 , 10,11 , 12,14,16

(1) 若n=8,m=4,数组a的元素依次为“3,4,6,10,13,14,21,25”,数组b的元素依次为“3,18,7,15”,按上述要求剔除m个数据后,数组b中保留的数据个数为个。
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Const n=1000,m=50

Dim a(1 To n)As Integer, b(1 To m)As Integer

Function getImax(k As Integer)As Integer

    ‘在数组元素b(1)~b(k)中找出值最大的元素,返回其下标,代码略

End Function

Private Sub Commandl_Click( )

    Dim i As Integer, j As Integer, k As Integer

    Dim na As Integer, nb As Integer, imax As Integer, mean As Integer

     ‘读取数据分别存入数组a、b,代码略

    na=n : nb=m

    imax=getImax(nb)

    For i=1 To m

        If a(na)<= Then

            b(imax)=b(nb)

            nb=nb-1

            If nb>0 Then imax=getImax(nb)

        Else

            na=na-1

        End If

    Next i

    Do While nb>0

        i=1 : j=na

        imax= getImax(nb)

    Do While i<=j

        mean =(i+j)\2

        If a(mean)<b(imax) Then i= mean +1 Else j=mean-1

    Loop

        For k=na To 1 Step-1

            

        Next k

        a(i+nb-1)=b(imax)

        b(imax)=b(nb)

        

        nb=nb-1

    Loop

    '输出数组a,代码略

End Sub

综合题 困难