您的位置:首页 > 编程语言 > C语言/C++

LUOGU P3954题解(NOIP 2017普及组第一题)

2017-11-26 21:19 309 查看
题目描述:

牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是:

总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%

牛牛想知道,这门课程自己最终能得到多少分。



NOIP 2017普及组的第一题,很多神犇+大佬一看到此题马上开始切,过了第一个样例点之后直接去切下一道,然而,这里有个小细节需要我们去注意。

我们在用double 或者是 flout 实数类型的时候,赋值时会有微弱的区别,比如说:

double a=0.2;

这个时候,计算机会将其储存为:

a=0.1999999 或者是 a=0.2000001

我们用5*a 的时候,有可能输出0(当答案<1时直接储存为0),也有可能输出1, 所以这是一大坑点。(虽然CCF已经解决)。

但是,我们要避免这种情况的发生,我们可以采用强制类型转换的方法,亦可是直接进行除法运算,即可解决。

代码如下:

1.强制类型转换

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
double a,b,c;
cin>>a>>b>>c;
double res=a*0.2+b*0.3+c*0.5;
long ans=(long) res; //强制将double类型数res转化为长整数ans。
cout<<ans;  //输出
return 0;
}


2.除

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
long a,b,c;
cin>>a>>b>>c;
long res=(a/5)+(b/3.333)+(c/2);  //进行除法运算,注意b
cout<<res;  //输出
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++