m = InputBox("输入第一个自然数")
n = InputBox("输入第二个自然数")
If m > n Then t = m: m = n: n = t
Dim i As Integer, x As Integer
For i = 1 To m
If n Mod i = 0 And m Mod i = 0 Then
x = i
End If
Next
MsgBox ("最大公约数为" & x)
End Sub
VB求最大公约数VB程序是需要进行多次辗转相除法来求得。
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。
VB实现辗转相除需要通过循环结构实现。
循环结构,循环结构允许重复执行一行或数行代码。Visual Basic 支持的循环结构有:
DoLoop
ForNext
For EachNext
本代码运用DoLoop组成的自定义函数实现求多个数的最大公约数。
Option ExplicitDim m, n, t, r, j
Dim x As Integer, y As Integer, z As Integer, w As Integer
Dim t1 As Integer, t2 As Integer, t3 As Integer, t0 As Integer
Private Sub Command1_Click() '求三个数的
x = Val(Text1Text)
y = Val(Text2Text)
z = Val(Text3Text)
t1 = gys(x, z)
t2 = gys(x, y)
t = gys(t1, t2)
Print t;
End Sub
Private Sub Command2_Click() '求四个数的
x = Val(Text1Text)
y = Val(Text2Text)
z = Val(Text3Text)
w = Val(Text4Text)
t1 = gys(x, z)
t2 = gys(x, y)
t3 = gys(x, w)
t = gys(t1, t2)
t = gys(t, t3)
Print t;
End Sub
Public Function gys(m, n) '最大公约数函数
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
gys = m
End FunctionPrivate Sub Form_click()
m = Val(InputBox("输入m"))
n = Val(InputBox("输入n"))
If m < n Then
t = m: m = n: n = t
r = m Mod n
Do While r <> 0
m=n:n=r:r=m mod n
Loop
Print m; ","; n; "的最大公约数"; n
Print "最小公倍数=", m n / n '问题出现在这句mn/n=m
End Sub
修改如下:
Private Sub Form_click()
m = Val(InputBox("输入m"))
n = Val(InputBox("输入n"))
m1=m:n1=n '添加m1,n1保存m,n的值
If m < n Then
t = m: m = n: n = t
r = m Mod n
Do While r <> 0
m=n:n=r:r=m mod n
Loop
Print m; ","; n; "的最大公约数"; n
Print "最小公倍数=", m1 n1 / n
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)