酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

c++ 四舍五入 时间限制:1000ms 内存限制:128MB 给定一个小数点后数字有 n 位的的小数 x(0<x<1), 请你将数字 x 四舍五入保留 m 位小数输出. 输入格式 第一行给出一个整数 n(1≤n≤1000),代表小数 x 在小数点后的数字个数。 第二行输入一行字符串, 代表一个小数 x。 第三行给出一个整数 m , 代表需要保留的位数 (m≤n)。 输出格式 输出一行数字, 表示 x 四舍五入保留 m 位以后的结果。 样例组 输入#1 复制 15 0.145410686144136 11 输出#1 复制 0.14541068614

```cpp #include <iostream> #include <string> // 对小数进行四舍五入操作 std::string roundNumber(const std::string& numStr, int m) { // 找到小数点的位置 size_t dotPos = numStr.find('.'); // 如果需要保留的位数等于小数点后的位数,直接返回原数 if (m == static_cast<int>(numStr.length() - dotPos - 1)) { return numStr; } // 从第 m+1 位开始检查是否需要进位 if (numStr[dotPos + m + 1] >= '5') { std::string result = numStr.substr(0, dotPos + m + 1); int carry = 1; // 从第 m 位开始向前处理进位 for (int i = dotPos + m; i > dotPos; --i) { if (carry == 0) { break; } if (result[i] == '9') { result[i] = '0'; } else { result[i]++; carry = 0; } } // 如果整数部分需要进位 if (carry == 1) { result = "1" + result.substr(0, dotPos + 1); } return result; } // 不需要进位,直接截取前 m 位小数 return numStr.substr(0, dotPos + m + 1); } int main() { int n; std::string x; int m; // 读取小数点后的数字个数 std::cin >> n; // 读取小数 std::cin >> x; // 读取需要保留的位数 std::cin >> m; // 进行四舍五入操作 std::string result = roundNumber(x, m); // 输出结果 std::cout << result << std::endl; return 0; } ``` 额外注意的逻辑点 1. 处理进位时,要考虑到连续进位的情况,例如 `0.999` 保留 2 位小数时,需要从最后一位开始依次进位。 2. 当整数部分需要进位时,要正确处理整数部分的变化,例如 `0.99` 保留 0 位小数时,结果应该是 `1`。 3. 要确保输入的小数格式正确,即小数点后有 `n` 位数字,并且 `m` 不超过 `n`。 [2025-07-05 15:32:23 | AI写代码神器 | 598点数解答]

相关提问