好家伙,原来你是这样的printf函数!

起因:

没事刷洛谷偶然发现了这个题

一看,不就一个简单的三角形面积嘛,海伦公式秒了

一做发现有点小问题,四舍五入怎么搞?想起来 C++ 的 cmath 库函数里有个 round 函数,直接拿来用就行了,我第一遍提交的代码是这样的:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double edge1, edge2, edge3;
    cin >> edge1 >> edge2 >> edge3;

    double p = (edge1 + edge2 + edge3) * 0.5;
    double area = sqrt(p * (p - edge1) * (p - edge2) * (p - edge3));

    double round_area = round(area);

    printf("%.1lf", round_area);
    return 0;
}

 然后美滋滋的去提交,结果.....................

纳尼?

What's up 你怕不是在逗我,入门题我都只对了一个测试点

然后就是漫长的排查问题,emmmmmm,排了半天也没有排查出来原因

没办法,去看题解吧

然后发现题解中的结果都没有四舍五入,直接

printf("%.1lf", area);

就完事了?

然后我试了试,去掉 round 函数还真过了

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double edge1, edge2, edge3;
    cin >> edge1 >> edge2 >> edge3;

    double p = (edge1 + edge2 + edge3) * 0.5;
    double area = sqrt(p * (p - edge1) * (p - edge2) * (p - edge3));

    //double round_area = round(area);
    // 设置精度的时候是自带四舍五入功能的,不需要再次引入库函数

    printf("%.1f", area);
    return 0;
}

我靠,真神奇!

以前从没有注意到这个问题,只是知道printf函数可以保留精度,不知道还可以四舍五入啊(也可能是书上有,很久没看书忘了............)

于是我找了几个数据测试了一下

 emmmmm,长知识了,确实可以四舍五入,前提是需要printf函数保留精度并且保留的精度不是小数点后的最后一位

冷知识:float 和 double 默认保留的都是 6 位小数,所以 Number4 输出的末尾会有一个0

今天又是知识满满的一天!

总结:

 如果题目需要对数据进行四舍五入,同时还需要对数据保留一定的精度,不用调用库函数 round,直接输出的时候对精度进行指定位数的保留就行了,无所谓,printf 函数会出手

 如果您觉得我的文章有问题,请您私信我,我看到后会及时改正!

感谢您的阅读!

  • 42
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值