显示两个整数之间的偶数之和

时间:2013-09-14 21:46:00

标签: vb.net

我有一个Visual Basic程序,它需要来自用户的两个整数。

我需要能够显示输入的两个整数之间的偶数之和 由用户。如果用户的条目是偶数,则应将其包括在总和中。

我无法搞清楚算法。

这是我的代码:

Public Class frmMain

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    Me.Close()
End Sub

Private Sub txtFirstNum_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtFirstNum.KeyPress
    ' allows the text box to accept only numbers, and the Backspace key

    If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso
        e.KeyChar <> ControlChars.Back Then
        e.Handled = True
    End If
End Sub

Private Sub txtSecondNum_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtSecondNum.KeyPress
    ' allows numbers and Backspace only

    If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso
        e.KeyChar <> ControlChars.Back Then
        e.Handled = True
    End If
End Sub

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
    ' display the sum of even numbers

    ' declarations
    Dim intFirstNum As Integer
    Dim intSecondNum As Integer

    ' convert string to number with TryParse method
    Integer.TryParse(txtFirstNum.Text, intFirstNum)
    Integer.TryParse(txtSecondNum.Text, intSecondNum)

    ' find the even numbers
    If intFirstNum Mod 2 = 0 Then

    ElseIf intFirstNum Mod 2 = 1 Then

    End If

    ' add the even numbers

    ' display the result

End Sub
End Class

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您可以计算出有多少偶数,并从中计算总和:

' adjust the numbers to the closest even number
If (intFirstNum mod 2) = 1 Then intFirstNum += 1
If (intSecondNum mod 2) = 1 Then intSecondNum -= 1

' determine how many even numbers there are in the range
Dim count As Integer = (intSecondNum - intFirstNum) \ 2 + 1

' the sum is the average times the count
Dim sum As Integer = (intFirstNum + intSecondNum) * count \ 2

TryParse方法返回一个布尔值,告诉您是否可以解析字符串。您不应忽略返回值,因此请将其用作:

If Integer.TryParse(txtFirstNum.Text, intFirstNum) Then
  ' yes, it was a number
End If

答案 1 :(得分:0)

如果您知道第一个数字是在开始时检查,那么您不必检查沿途每个数字的模数,并且可以增加2秒:

Public Function SumEvenNumbers(ByVal Start As Integer, ByVal End As Integer) As Integer
    If Start Mod 2 = 1 Then Start += 1

    Dim Result As Integer = 0
    While Start <= End
       Result += Start
       Start += 2
    End While

    Return Result
End Function

只是为了好玩,这是一个使用linq和Enumerable.Range的例子:

Public Function SumEvenNumbers(ByVal Start As Integer, ByVal End As Integer) As Integer
     If Start Mod 2 = 1 Then Start += 1
     Return Enumerable.Range(Start, End - Start).Sum(Function(i) i Mod 2 == 0)
End Function

但最好的答案是已经发布的答案,只使用数学将其全部降低到固定平均值(O(1),而不是O(n))。

答案 2 :(得分:-1)

Public Function GetEvenNumberSum(min As Integer, max As Integer) As Integer
    Dim sum As Integer = 0
    For i As Integer = min To max
        If i Mod 2 = 0 Then
            sum += i
        End If
    Next
    Return sum
End Function