首先,这里的问题很简单,题目如下:
分支-08. 高速公路超速处罚(15)
按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
输入样例1:
65 60
输出样例1:
OK
输入样例2:
110 100
输出样例2:
Exceed 10%. Ticket 200
输入样例3:
200 120
输出样例3:
Exceed 67%. License Revoked
因此,我就编写了如下的代码:
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
double v, c;
cin >> v >> c;
// cout << "v = " << v << " c+0.1c = " << c+0.1*c << endl;
if (v >= c+0.1*c && v < c+0.5*c)
{
cout << "Exceed " <<setiosflags(ios::fixed)<<setprecision(0) << v*100/c -100 << "%. Ticket 200" << endl;
}else if (v >= c+0.5*c){
cout << "Exceed " <<setiosflags(ios::fixed)<<setprecision(0) << v*100/c -100 << "%. License Revoked" << endl;
// Exceed x%. License Revoked
}else{
cout << "OK" << endl;
}
// cout << "Hello world!" << endl;
return 0;
}
是不是很简单?但是当我输入110 和100的时候,这个结果出来的不对了
我们理论上的结果应该是超速了吧,但是这里的结果确实显示“OK!”!!!
这让我非常费解啊。
此时,我觉得你可能会猜测,怀疑这是codeblock这个编译器的问题,那我要告诉你的是我已经用dev C++ 和visual studio 也运行过了,一样会出现这个问题。
除非。。。所有编译器都有问题???(我觉得这个可能性是比较小的)
因此我暂且就讲问题放在这里,以后我再回来看看吧。。。
如果有哪位牛人知道这其中的原因请一定不吝赐教!!!
------------------------------------------------------------------
这个问题放在这里好久了。。。都没有人给留言讨论一下。。。。/(ㄒoㄒ)/~~
不过,这几天在看书刷题的过程中,猛然觉醒,浮点数在计算机中的表示是不精确的!!!所以才会导致上述事情的发生! 恩就是这样的!
|