为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
FOSS 2016-10-29 00:51:26
题目要求是:输入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第七位才四舍五入了,这个也不知道为什么。刚开始学,谢谢大家的指点
查看完整描述

3 回答

已采纳
?
心有猛虎_细嗅蔷薇

TA贡献119条经验 获得超250个赞

(%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;
}

希望能帮助到你^_^

查看完整回答
反对 回复 2016-10-29
?
藏天慕道

TA贡献3条经验 获得超16个赞

我可以帮你解读一下你的关键语句,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型在进行运算。

希望能帮到你。


查看完整回答
反对 回复 2016-10-31
  • 3 回答
  • 0 关注
  • 1508 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信