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第七位才四舍五入了,这个也不知道为什么。刚开始学,谢谢大家的指点 |
免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。
版权声明:作者保留权利,不代表本站立场。
|
|
|
|
|
|
|
(%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型在进行运算。
希望能帮到你。 |
|
|
|
|
|
|
|