酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++实现累加数列求第n项:公式法与循环法详解

## 🔍 问题分析 题目描述了一个**递增数列**,其规律为: - 第 1 个数是 **1** - 第 2 个数 = 第 1 个数 + 2 - 第 3 个数 = 第 2 个数 + 3 - 第 4 个数 = 第 3 个数 + 4 - 以此类推,**第 n 个数 = 第 (n-1) 个数 + n** 这是一个**累加序列**,即: ``` a₁ = 1 a₂ = 1 + 2 a₃ = 1 + 2 + 3 ... aₙ = 1 + 2 + 3 + ... + n = n*(n+1)/2 ``` 所以最终结果可以直接用**等差数列求和公式**计算,也可以用**循环累加**实现。 --- ## 💻 C++ 代码实现 ### 方法一:数学公式(推荐,O(1) 时间复杂度) ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 等差数列求和公式:1 + 2 + ... + n long long result = (long long)n * (n + 1) / 2; cout << result << endl; return 0; } ``` ### 方法二:循环累加(直观易懂,O(n) 时间复杂度) ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; for (int i = 1; i <= n; i++) { sum += i; } cout << sum << endl; return 0; } ``` --- ## 📥 输入输出说明 - **输入**:一个正整数 n(1 ≤ n ≤ 100) - **输出**:第 n 个数的值 **输入样例**: ``` 7 ``` **输出样例**: ``` 28 ``` **验证**:1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 ✅ --- ## ⚠️ 开发注意事项 1. **数据类型选择**:虽然 n ≤ 100 时结果最大为 5050,不会溢出,但建议使用 `long long` 以防扩展需求。 2. **公式陷阱**:`n*(n+1)/2` 中 `n*(n+1)` 可能先溢出再除,因此**先转 long long 再相乘**。 3. **边界条件**:n = 1 时结果为 1,公式和循环均能正确处理。 4. **可读性**:建议添加注释,清晰表达公式来源。 --- ## 🚀 拓展思考 - 该问题本质是**三角数(Triangular Numbers)** 的应用。 - 若要求输出整个序列,可用数组存储,动态规划思想。 - 若 n 极大(如 10⁹),必须用公式法,循环会超时。 ######[AI写代码神器 | 685点数解答 | 2026-07-31 19:02:22]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]