猿问

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

题目要求是:输入3个值:梯形的上底、下底和高,计算并输出该梯形的面积。保留小数6位,第7位四舍五入;

我的代码是:

#include<stdio.h>
int 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第七位才四舍五入了,这个也不知道为什么。刚开始学,谢谢大家的指点

FOSS
浏览 1509回答 3
3回答

心有猛虎_细嗅蔷薇

(%f 在不指定位数时,默认保留6位小数.)建议使用pow()函数求次数方,包含<math.h>头文件。s= (float) ( (int) ( pow(10,n) *s + 0.5)) / pow(10,n); //n代表浮点数四舍五入到小数的第n位完整代码如下:#include<stdio.h> #include<math.h>  int main() {      float a,b,h,s;      int n=6;        //n也可以由scanf存入(这儿为了方便直接保留6位)      printf("Please input a,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);      return 0; }希望能帮助到你^_^

藏天慕道

我可以帮你解读一下你的关键语句,s=(int)(100000.0*s+0.5)/100000.0;假设s=2.345678100000.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
我要回答