定义上限值时如何计算数字之和?

时间:2021-06-14 21:13:05

标签: .net vb.net

例如如何在用户输入 5 时计算 1+2+3+4+5 或当用户输入 7 时如何计算 1+2+3+4+5+6+7。我已经计划使用if 语句阻止计算 0 和负数... 我知道这是非常基本的,但我的导师无法帮助我,我想了解这个练习背后的代码是如何工作的。

3 个答案:

答案 0 :(得分:1)

让我们试着把它分解成你会如何自己做。

如果我让你...

<块引用>

计算所有正数之和直到 3

...你会:

  • 1 开头并记下。
  • 继续2,将其添加到之前的结果(1 + 2)
  • 继续3,将其添加到之前的结果(1 + 2 + 3)

最终结果是6

要实现这一点,您只需要我提供一条信息,upperLimit。然后,您查看了 1upperLimit 之间的所有值并将它们汇总。这相当于拥有一个函数,接受 upperLimit 作为参数,然后循环遍历该范围内的所有值并将它们相加:

Private Function SumUpTo(ByVal upperLimit As Integer) As Integer

    ' start at 0
    Dim result As Integer = 0

    ' go through all values between 1 and upperLimit
    For i = 1 To upperLimit
        ' add current value to result variable
        result = result + i
    Next

    Return result

End Function

幸运的是,有一个公式可以用来在不遍历所有值的情况下获得相同的结果,称为“n 无穷级数的“1 + 2 + 3 + 4 + ⋯th 部分和 em>":

<块引用>

n * (n + 1) / 2(参考:1 + 2 + 3 + 4 + ⋯

Private Function SumUpTo(ByVal upperLimit As Integer) As Integer

    Return upperLimit * (upperLimit + 1) / 2

End Function

我不认为你的导师在寻找你的数学知识,而是你的算法思维,所以我相信他会寻找第一个解决方案,而不是后者。此外,您在另一个答案的评论中询问如何计算 1 * 2 * 3 * 4 * ⋯;我想知道采用我的第一个解决方案并从字面上调整一个角色来实现这一目标是多么容易。

答案 1 :(得分:1)

一个简单的解决方案是使用 Enumerable.Range (documentation) 生成从 1 到 n 的数字范围,然后使用 Enumerable.Sum (documentation) 生成计算集合的总和。

这是一个例子:

Private Function CalculateSum(upper As Integer) As Integer
    If (upper < 1) Then
        Throw New ArgumentException("Value cannot be less than 1", NameOf(upper))
    End If

    Return Enumerable.Range(1, upper).Sum()
End Function

答案 2 :(得分:0)

也许这个会有所帮助? Stack post

您可以使用函数 f(n) = (n+1)n/2

相关问题