题目来源:大工慕课 链接
原题:Visual Basic程序设计教程(第二版)龚沛曾主编,高等教育出版社 实验6-6
作者:Caleb Sung
题目要求
如果一个整数的所有因子(包括1,但不包括本身)之和与该数相等,则称这个数为完数。例如6=1+2+3,所以6是一个完数。编写一个函数IsWs(m)判断m是否为完数,函数的返回值是逻辑型。主调程序显示1000以内的完数,如图所示。
提示
判断一个数m是否是完数,算法思想是:将m依次除以1~m/2,如果能整除,就是m的一个因子,进行累积;循环结束,若m与累加因子之和相等,m就是完数。
参考代码
这里我偷了个懒没画list,大家可以参照我的改一下
全局定义
Dim a%()
响应点击主窗体
Private Sub Form_Click()
Print "1000以内的完数为:"
For i = 1 To 1000
If IsWs(i) Then
Print i; "=1";
For j = 1 To UBound(a)
Print "+"; a(j);
Next j
Print
End If
Next i
End Sub
计算函数:IsWs()
Function IsWs(m) As Boolean
Dim s%
s = 0
For i = 1 To m \ 2
If m Mod i = 0 Then
ReDim Preserve a(j)
a(j) = i
j = j + 1
s = s + i
End If
Next i
If m = s Then IsWs = True
End Function