快捷导航

oj的一道求面积题目,不知道为什么一直是wrong answer

题目要求是:输入3个值:梯形的上底、下底和高,计算并输出该梯形的面积。保留小数6位,第7位四舍五入;我的代码是:#includeint main(void){float a,b,h,s;scanf("%f %f %f",&a,&b,&h);s=(a+b)*h/2;s=((int)(100000.0*s+0.5)/100000.0);printf("%.6f\n",s);return 0;}交上去了一直是wrong answer,保留6位小数第七行好像是乘1000000.0,但是在自己的编译器上只有乘100000.0第七位才四舍五入了,这个也不知道为什么。刚开始学,谢谢大家的指点

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员2

(%f 在不指定位数时,默认保留6位小数.)
建议使用pow()函数求次数方,包含头文件。
s=(float)((int)(pow(10,n)*s+0.5))/pow(10,n);//n代表浮点数四舍五入到小数的第n位完整代码如下:
#include#includeintmain(){floata,b,h,s;intn=6;//n也可以由scanf存入(这儿为了方便直接保留6位)printf("Pleaseinputa,b,h:");scanf("%f%f%f",&a,&b,&h);s=(a+b)*h/2;s=(float)((int)(pow(10,n)*s+0.5))/pow(10,n);printf("%.6f\n",s);return0;}希望能帮助到你^_^
回复

使用道具 举报

我可以帮你解读一下你的关键语句,s=(int)(100000.0*s+0.5)/100000.0;
假设s=2.345678
100000.0*s=234567.8
(100000.0*s+0.5)=234568.3
(int)(100000.0*s+0.5)=234568
(int)(100000.0*s+0.5)/100000.0=2.34568
注:加减乘除运算中有一个数是float或double型,系统将数据全部转化成double型在进行运算。

希望能帮到你。
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP