这个完美的数字函数有什么问题?该方法应该决定输入的数字是否是/不是一个完美的数字。答案应该是从1到输入的所有完美数字。
例如:1- 100答案是6和28。
Public Function isPerfect(myInput As Integer) As Boolean
endCounter = myInput \ 2
sum = 1
For perfectCounter As Integer = 2 To endCounter
If myInput Mod perfectCounter = 0 Then
sum += perfectCounter
If sum = myInput Then
Return True
End If
End If
Next
Return False
End Function
Private Sub btnPerfect_Click(sender As Object, e As EventArgs) Handles btnPerfect.Click
input = Convert.ToInt32(txtNumber.Text)
msg = "The perfect numbers between 1 and " & input & " are : "
For inputCounter As Integer = 0 To input
If isPerfect(inputCounter) = True Then
msg += inputCounter & " "
End If
Next
MsgBox(msg, , "Perfect Number")
txtNumber.Focus()
txtNumber.Text = Nothing
End Sub发布于 2015-10-06 19:24:48
你至少有几个问题:
比如说..。
If sum = myInput Then
Return True
End If在循环之后,应该检查上面的内容。
endCounter设置为myInput \ 2,所以没有对所有的除数进行求和。也许你这样做是为了优化。但如果是这样的话,你在路上忘了一些东西。一个快速解决方法是将endCounter分配更改为:
endCounter = myInput - 1此外,为了避免将1作为有效的完美数字返回,我会将sum初始化为0,并通常在1而不是2启动循环。
因此,您的功能可以类似于:
Public Function isPerfect(myInput As Integer) As Boolean
Dim endCounter As Integer = myInput - 1
Dim sum As Integer = 0
For perfectCounter As Integer = 1 To endCounter
If myInput Mod perfectCounter = 0 Then
sum += perfectCounter
End If
Next
Return sum = myInput
End Function如果你想的话,我相信你可以进一步优化它。
(*)也考虑打开Option Explicit。
发布于 2015-10-06 19:27:45
以下是isPerfect的正确实现:
Public Function isPerfect(myInput As Integer) As Boolean
dim Sum as Integer = 1
For i as Integer = 2 To myInput / 2
If myInput Mod i = 0 Then Sum = Sum + i
Next
Return Sum = myInput
End Functionhttps://stackoverflow.com/questions/32977505
复制相似问题