题目描述
编程求解下列式子的值:[ S = 1 + 2 + 3 + \cdots + n ]。
输入
输入一行,只有一个整数 ( n )(( 1 \leq n \leq 1000 ))。
输出
输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。
样例
- 输入:100
- 输出:5050
解题思路
这个问题可以通过多种方法解决,包括直接求和、使用数学公式以及利用Python的内置函数。下面我们将详细介绍这些方法。
方法一:直接求和
直接使用循环来累加从1到n的所有整数。
def sum_of_n(n):
total = 0
for i in range(1, n + 1):
total += i
return total
# 示例
n = int(input(请输入一个整数 n (1 <= n <= 1000): ))
result = sum_of_n(n)
print(result)
方法二:使用数学公式
根据数学公式,求和 ( S = 1 + 2 + 3 + \cdots + n ) 可以简化为 ( S = \frac{n(n + 1)}{2} )。
def sum_of_n(n):
return n * (n + 1) // 2
# 示例
n = int(input(请输入一个整数 n (1 <= n <= 1000): ))
result = sum_of_n(n)
print(result)
方法三:使用Python内置函数
Python提供了内置函数sum()
,可以简化求和的过程。
def sum_of_n(n):
return sum(range(1, n + 1))
# 示例
n = int(input(请输入一个整数 n (1 <= n <= 1000): ))
result = sum_of_n(n)
print(result)
性能比较
- 直接求和:这种方法虽然简单,但当n较大时,性能会受到影响。
- 数学公式:这种方法利用了数学公式,计算速度快,且不受n值大小的影响。
- Python内置函数:这种方法利用了Python的内置函数,代码简洁,但性能与直接求和类似。
代码实现
下面是一个完整的Python程序,实现了上述三种方法,并比较了它们的性能。
import time
def sum_of_n_direct(n):
total = 0
for i in range(1, n + 1):
total += i
return total
def sum_of_n_formula(n):
return n * (n + 1) // 2
def sum_of_n_builtin(n):
return sum(range(1, n + 1))
# 示例
n = int(input(请输入一个整数 n (1 <= n <= 1000): ))
start_time = time.time()
result_direct = sum_of_n_direct(n)
end_time = time.time()
print(f直接求和结果: {result_direct}, 耗时: {end_time - start_time:.6f}秒)
start_time = time.time()
result_formula = sum_of_n_formula(n)
end_time = time.time()
print(f数学公式结果: {result_formula}, 耗时: {end_time - start_time:.6f}秒)
start_time = time.time()
result_builtin = sum_of_n_builtin(n)
end_time = time.time()
print(f内置函数结果: {result_builtin}, 耗时: {end_time - start_time:.6f}秒)
总结
通过上述方法,我们可以高效地解决求和问题。数学公式方法在性能上表现最佳,而直接求和和使用内置函数方法则在代码简洁性和易读性上各有优势。希望这篇博客能够帮助你更好地理解和解决这类问题。