首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB完善函数

VB完善函数
EN

Stack Overflow用户
提问于 2015-10-06 18:53:52
回答 2查看 100关注 0票数 0

这个完美的数字函数有什么问题?该方法应该决定输入的数字是否是/不是一个完美的数字。答案应该是从1到输入的所有完美数字。

例如:1- 100答案是6和28。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-06 19:24:48

你至少有几个问题:

  1. 您正在验证循环中的完美数字,甚至还没有完成除数的求和。

比如说..。

代码语言:javascript
复制
If sum = myInput Then
    Return True
End If

在循环之后,应该检查上面的内容。

  1. 更重要的是,因为您将endCounter设置为myInput \ 2,所以没有对所有的除数进行求和。也许你这样做是为了优化。但如果是这样的话,你在路上忘了一些东西。

一个快速解决方法是将endCounter分配更改为:

代码语言:javascript
复制
endCounter = myInput - 1

此外,为了避免将1作为有效的完美数字返回,我会将sum初始化为0,并通常在1而不是2启动循环。

因此,您的功能可以类似于:

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2015-10-06 19:27:45

以下是isPerfect的正确实现:

代码语言:javascript
复制
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 Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32977505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档