当前位置:编程学习 > VB >>

求VB题目分析

给出两个正整数,求它们的最大公约数和最小公倍数。在数学我会做可是VB就不会了啊,这个题目要怎么分析的
答案:1、用辗转相除法(欧几里德法)求最大公约数
算法描述:
m用n求余为a, 若a不等于0
则 m = n, n = a, 继续求余
否则(即若a为0)  n 为最大公约数
2、 最小公倍数 = 两个数的积 / 最大公约数

代码如下,请结合算法分析看:

'求最大公约数的函数,参数M、N为两个正整数

Function GY(ByVal M As Integer, ByVal N As Integer) As Integer
       Dim T As Integer
       If M < N Then   '如果M比N小,则将两数对调,为后面M mod N准备 

             T = M

             M = N

             N = T

       End If
       T = M Mod N

       ‘以下循环是算法重点:m用n求余为a, 若a不等于0则 m = n, n = a, 继续求余,否则(即若a为0)  n 为最大公约数
       While T <> 0             

             M = N
             N = T
             T = M Mod N
       Wend
       GY = N

End Function

 

'求最小公倍数的函数

Function GB(ByVal M As Integer, ByVal N As Integer) As Integer
        GB = M * N / GY(M, N)
End Function

 

'按钮点击事件

Private Sub Command1_Click()
     Dim M As Integer, N As Integer
     M = Val(InputBox("输入第一个整数:"))
     N = Val(InputBox("输入第二个整数:")) 
     MsgBox "公约数是" & GY(M, N) & ",公倍数是" & GB(M, N)

End Sub

根据求最大公约数的公式 :辗转相除法

步骤是:

设有数a, b

1) 求a / b ,得余数r

2) 如果r = 0, 此时的 b 值 即为所求最大公约数。

3) r不为0, 令a = b,  b= r ,  重复1) 到 3) 直到r=0

 

用VB语句可表示为:

dim a, b, a1, b1, r, s 

a = 125

b = 55   '这里随便找两个数测试

'记录原来的数

a1=a

b1=b

'下面开始算法

r= a mod b   ' 第1)步

while r<>0     '第2)步判断

a = b             '不为0,第3)步

b = r

r = a mod b

loop 

  '为0,结束循环,此时b即为所求

 

debug.print  "最大公约数是:" & b

r = b  '最大公约数放到r中免得看着混乱

'最小公倍数是:两数相乘再除以最大公约数

s = a1 *  b1 / r

 

debug.print "最小公倍数是:" & s

 

上一个:求VB字符型函数
下一个:VB选择题急急急

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,