You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++初学者Codewars问题:给定圆弧长度计算红色正方形面积并实现两位小数四舍五入

解决Codewars中C++四舍五入返回两位小数的问题

嘿,你已经把核心的数学推导搞定了,厉害!问题出在结果的四舍五入处理上——你现在返回的是原始计算的精确值,但题目要求返回四舍五入到两位小数的结果,这就是测试不通过的原因。

先确认你的推导没问题

首先得给你点个赞:圆弧A是四分之一圆的弧长,所以推导出来的半径公式 r = (2*A)/M_PI,以及正方形面积是 r*r,这些都是完全正确的。

为什么std::precision()没起作用?

你提到用了std::precision()但不知道怎么返回——这个方法是用来控制输出流的显示格式的,比如你用cout打印结果时,设置它能让控制台显示两位小数,但它不会改变你返回的double变量本身的值。而Codewars的题目是要求你返回的数值本身满足两位小数的精度要求,所以光靠输出格式化是没用的,得直接对计算结果做四舍五入操作。

正确的解决方案

最直接可靠的方法是用C++标准库的std::round()函数(需要包含<cmath>头文件),步骤很简单:

  1. 把计算出的面积乘以100,这样两位小数就变成整数部分
  2. 用std::round()对这个数取四舍五入后的整数
  3. 再除以100.0,把数值还原回两位小数的格式

修改后的代码如下:

#include <cmath>

double square_area(double A) {
    double r = (2 * A) / M_PI;
    double area = r * r;
    // 四舍五入到两位小数
    return std::round(area * 100) / 100.0;
}

补充小细节

  • 如果你之前引入了<iostream>,其实可以删掉,因为我们不需要控制台输出,只需要计算并返回结果
  • 要是担心std::round的兼容性(不过Codewars的编译环境肯定支持),也可以用floor(area * 100 + 0.005) / 100.0来实现四舍五入,但std::round是最直观的选择

这样修改后,返回的数值就是四舍五入到两位小数的结果,应该就能通过所有测试了!

内容的提问来源于stack exchange,提问作者albwdv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:03:12