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

C++ 数字条件处理:绝对值与四舍五入实现

好的,我们来一步步分析并解决这个 C++ 编程问题。 ## 🧩 问题分析 我们需要处理一组数字,规则如下: 1. **如果数字是 负数 或 0**:输出它的 **绝对值**。 2. **如果数字是 正数**:输出它 **四舍五入** 后的整数结果。 输入格式: - 第一行:一个正整数 `n`,表示数字个数。 - 第二行:`n` 个数字(可能是整数或小数)。 输出格式: - 按顺序输出每个数字处理后的结果,用空格分隔。 --- ## 💻 C++ 代码实现 下面是完整且符合题目要求的 C++ 代码: ```cpp #include <iostream> #include <cmath> // 用于 abs 和 round #include <iomanip> // 用于控制输出格式 using namespace std; int main() { int n; cin >> n; // 读取数字个数 double num; // 使用 double 支持小数 for (int i = 0; i < n; ++i) { cin >> num; // 逐个读取数字 if (num <= 0) { // 负数和0:输出绝对值 cout << abs(num); } else { // 正数:四舍五入 cout << round(num); } // 除了最后一个数字,后面都加空格 if (i < n - 1) { cout << " "; } } cout << endl; // 最后换行 return 0; } ``` --- ## 📖 关键函数解释 | 函数 | 作用 | 头文件 | |------|------|--------| | `abs(num)` | 返回 `num` 的绝对值(对于浮点数返回浮点绝对值) | `<cmath>` | | `round(num)` | 返回 `num` 四舍五入后的最接近整数(但返回类型为 `double`) | `<cmath>` | > ⚠️ 注意:`abs` 传入 `double` 时,返回的是 `double` 类型的绝对值,但因题目输出要求为整数形式,所以 `cout` 会默认以整数形式输出(无小数位)。 --- ## 🏃 样例验证 输入: ``` 2 -1 3 ``` 运行过程: - `-1` 是负数 → 输出 `abs(-1)` = `1` - `3` 是正数 → 输出 `round(3)` = `3` 输出: ``` 1 3 ``` ✅ 与题目样例一致。 --- ## 🧠 进阶注意事项 1. **数据类型选择**: - 用 `double` 而不是 `float`,避免精度丢失。 - 用 `int` 接收输入可能会丢失小数部分,导致四舍五入不准确。 2. **输出格式控制**: - 如果正数四舍五入后是整数,`cout` 默认不会输出 `.0`,符合题目要求。 - 最后一个数字后不要加多余空格,否则 OJ 可能会判错。 3. **边界情况**: - 如果输入 `0` → `abs(0) = 0`,正确。 - 如果输入 `-0.5` → `abs(-0.5) = 0.5`,但题目要求输出整数?这里题目未明确说明,但样例输入都是整数。若遇到小数负数,绝对值可能不是整数,但题目未要求四舍五入负数,因此我们直接输出 `abs` 的原值即可。 --- ## 🚀 开发建议 - **多测试边界值**:例如 `n=1`、`n=1000`、正数负数混合、大数、小数。 - **注意换行与空格**:在线评测系统对格式非常敏感。 - **使用 `cmath` 而非 `math.h`**:C++ 推荐使用带 `c` 前缀的头文件。 --- ## 📚 相关参考 - [C++ cmath 官方文档](https://en.cppreference.com/w/cpp/header/cmath) - [C++ round 函数](https://en.cppreference.com/w/cpp/numeric/math/round) - [C++ abs 函数](https://en.cppreference.com/w/cpp/numeric/math/abs) --- ######[AI写代码神器 | 967点数解答 | 2026-05-09 19:43:19]

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