酷代码 AI
菜单
服务商

C++ 计算 1 到 n 中数字 1 的出现次数的实现与解析

### 💡 思路分析 首先,我们需要遍历从 1 到 `n` 的所有整数。对于每个整数,我们要将其逐位拆分,检查每一位是否为 1,如果是则计数器加 1。返回计数器的值。 ### 📝 代码实现 ```cpp #include <iostream> using namespace std; // 计算数字 num 中 1 的个数 int countOnesInNumber(int num) { int count = 0; while (num > 0) { if (num % 10 == 1) { count++; } num /= 10; } return count; } // 计算从 1 到 n 中所有数字里 1 的总数 int countOnesInRange(int n) { int totalCount = 0; for (int i = 1; i <= n; i++) { totalCount += countOnesInNumber(i); } return totalCount; } int main() { int n; cin >> n; cout << countOnesInRange(n) << endl; return 0; } ``` ### 🔍 代码解释 1. **`countOnesInNumber` 函数**: - 该函数接受一个整数 `num` 作为参数。 - 使用 `while` 循环将 `num` 逐位拆分,通过 `num % 10` 获取当前位的数字。 - 如果当前位的数字为 1,则计数器 `count` 加 1。 - 通过 `num /= 10` 将数字右移一位,继续处理下一位。 - 最后返回计数器 `count` 的值。 2. **`countOnesInRange` 函数**: - 该函数接受一个整数 `n` 作为参数。 - 使用 `for` 循环遍历从 1 到 `n` 的所有整数。 - 对于每个整数,调用 `countOnesInNumber` 函数计算该整数中 1 的个数,并累加到 `totalCount` 中。 - 最后返回 `totalCount` 的值。 3. **`main` 函数**: - 从标准输入读取一个整数 `n`。 - 调用 `countOnesInRange` 函数计算从 1 到 `n` 中所有数字里 1 的总数。 - 将结果输出到标准输出。 ### 🚀 复杂度分析 - **时间复杂度**:$O(n log_{10} n)$,其中 $n$ 是输入的整数。对于每个数字,我们需要 $O(log_{10} n)$ 的时间来逐位拆分。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间。 ### 💡 开发建议 - **注释**:在代码中添加适当的注释,有助于提高代码的可读性,特别是对于复杂的逻辑部分。 - **模块化**:将不同的功能封装成独立的函数,如本题中的 `countOnesInNumber` 和 `countOnesInRange` 函数,提高代码的可维护性。 - **输入验证**:在实际应用中,应该对输入进行验证,确保输入的是有效的正整数。 ### 📚 学习资源 - [C++ 官方文档](https://en.cppreference.com/w/):提供了 C++ 语言的详细文档和参考资料。 - 《C++ Primer》:经典的 C++ 学习书籍,适合初学者和有一定基础的开发者。 ######[AI写代码神器 | 849点数解答 | 2026-04-11 20:24:18]

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