```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点数解答]