起因:
没事刷洛谷偶然发现了这个题
一看,不就一个简单的三角形面积嘛,海伦公式秒了
一做发现有点小问题,四舍五入怎么搞?想起来 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 函数会出手
如果您觉得我的文章有问题,请您私信我,我看到后会及时改正!