C++ 统计两数之和的数字中 2 的个数
好的,这是一个非常基础的编程题目,我们来一步步完成它。 ## 🎯 问题分析 我们需要: 1. 读入两个整数 `a` 和 `b` 2. 计算它们的和 `n = a + b` 3. 统计 `n` 的十进制表示中,数字 `'2'` 出现的次数 4. 输出这个次数 --- ## 📦 准备工作 本题不需要额外安装任何库,只需要一个标准 C++ 编译器(如 GCC、Clang 或 MSVC)即可。 --- ## ✍️ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; int n = a + b; int count = 0; // 特殊处理 n 为 0 的情况 if (n == 0) { // 0 的每一位中不包含 2,所以输出 0 cout << 0 << endl; return 0; } // 逐位检查 while (n > 0) { if (n % 10 == 2) { count++; } n /= 10; } cout << count << endl; return 0; } ``` --- ## 🔍 代码详解 | 部分 | 说明 | |------|------| | `cin >> a >> b;` | 从标准输入读取两个整数 | | `int n = a + b;` | 计算两数之和 | | `while (n > 0)` | 循环处理 n 的每一位 | | `n % 10` | 取出当前 n 的最低位(个位) | | `n /= 10` | 去掉 n 的个位,相当于右移一位 | | `if (n % 10 == 2) count++;` | 如果当前位是 2,则计数加 1 | > **注意**:这里我们假设输入的两个整数 `a` 和 `b` 都是非负整数。题目没有明确说明,但根据样例和常规竞赛题,可以这样假设。如果可能包含负数,需要额外处理绝对值。 --- ## 💡 进阶与优化 ### 📌 处理负数的情况 如果输入可能包含负数,我们需要修改代码以处理负数的符号位: ```cpp int n = a + b; int count = 0; // 取绝对值 int num = abs(n); // 特殊处理 0 if (num == 0) { cout << 0 << endl; return 0; } while (num > 0) { if (num % 10 == 2) { count++; } num /= 10; } cout << count << endl; ``` ### 📌 使用字符串方式(更直观) 另一种解题思路是将数字转换为字符串,然后统计字符 `'2'` 的出现次数: ```cpp #include <iostream> #include <string> using namespace std; int main() { int a, b; cin >> a >> b; string s = to_string(a + b); int count = 0; for (char c : s) { if (c == '2') { count++; } } cout << count << endl; return 0; } ``` **优点**:代码更短,易于理解 **缺点**:涉及字符串转换,会有额外的性能开销(但对于本题数据规模,完全可忽略) --- ## 🧪 测试用例验证 | 输入 | 过程 | 输出 | |------|------|------| | `12345 9876` | 22221 → 有4个2 | `4` | | `11 12` | 23 → 有1个2 | `1` | | `0 0` | 0 → 无2 | `0` | | `1 1` | 2 → 有1个2 | `1` | | `100 100` | 200 → 有0个2 | `0` | --- ## ⚠️ 常见陷阱 1. **忘记处理 n=0 的情况**:如果 `a + b == 0`,while 循环不会执行,count 为 0,但需要显式输出,否则可能输出未定义值。 2. **对负数处理不当**:如果输入包含负数,但未取绝对值,`while (n > 0)` 会直接跳过,导致错误结果。 3. **使用字符串方式时注意负号**:`to_string(-23)` 会得到 `"-23"`,此时字符 `'2'` 仍然会被正确统计,但需要确认题目是否允许负数输入。 --- ## 📚 学习建议 - 多练习数字位运算的题目,如“数字反转”、“回文数”等,加深对 `%` 和 `/` 的理解。 - 理解 `to_string()` 的使用场景和性能影响,在面对大数据量时,优先使用位运算方法。 - 建议尝试用不同的语言(如 Python、Java)实现相同逻辑,巩固算法思维。 --- ######[AI写代码神器 | 1138点数解答 | 2026-05-10 07:29:43]
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)71
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)88
- 星际编码大赛终极对决:机械星AI与异星人激战“逆序对”统计难题(字节豆包 | 509点数解答 | 2025-04-19 17:33:00)299
- Python:用正则表达式从含多种字符的字符串中提取英文、数字和中文单词(GPT | 522点数解答 | 2024-05-31 19:05:27)343
- Python:用正则表达式结合 split 思路提取一行字符串中的英文、数字和中文单词 (GPT | 399点数解答 | 2024-05-31 19:07:31)343
- 繁体字编码代码修改:人物名字合法性验证函数转简体版(字节豆包 | 325点数解答 | 2024-10-21 18:57:01)316
- 计算区间 n 到 m 中数字 x 出现次数的 Python 实现与详解(字节豆包 | 289点数解答 | 2025-12-07 17:14:59)106
- Python 实现:计算区间 n 到 m 中数字 x 出现的次数(字节豆包 | 322点数解答 | 2025-12-13 21:37:08)108
- C++实现戴夫后院抵御僵尸的植物选择策略(DeepSeek | 773点数解答 | 2026-01-19 19:20:57)68
- 高效计算逆序对:归并排序分治法详解与Python实现(阿里通义 | 1144点数解答 | 2026-03-18 17:49:11)56
- 解决 P2216 第 x 个数问题的 C++ 代码实现(字节豆包 | 368点数解答 | 2026-03-27 21:15:43)50
- 用 Pandas 深度剖析数据:从读取到统计分析全流程实战(GPT | 642点数解答 | 2024-06-30 15:39:49)383