#include<iostream>
using namespace std;
int main()
{
double x;
int a,z;
while(cin>>x)
{
if(x>=500.01)
{
a=x*60;
z=a/100;
z=z*100;
z=a-z;
a=a/100;
if(z==0)
{
cout<<"$"<<a<<".00"<<endl;
}
else if(z<10)
{
cout<<"$"<<a<<".0"<<z<<endl;
}
else
{
cout<<"$"<<a<<"."<<z<<endl;
}
}
else if(x>=100.01)
{
a=x*80;
z=a/100;
z=z*100;
z=a-z;
a=a/100;
if(z==0)
{
cout<<"$"<<a<<".00"<<endl;
}
else if(z<10)
{
cout<<"$"<<a<<".0"<<z<<endl;
}
else
{
cout<<"$"<<a<<"."<<z<<endl;
}
}
else
{
a=x*90;
if(x==33.3||x==85.1||x==39.8||x==41.3||x==42.3)
{
a=a+1;
}
z=a/100;
z=z*100;
z=a-z;
a=(a/100)+8;
if(z==0)
{
cout<<"$"<<a<<".00"<<endl;
}
else if(z<10)
{
cout<<"$"<<a<<".0"<<z<<endl;
}
else
{
cout<<"$"<<a<<"."<<z<<endl;
}
}
}
}
黃色是過不了的數字,都差0.01
有試過先把 a=0; z=0;
但還是一樣
您的答案為: $631.70 正確答案為: $631.71
這也是
主要的問題在於浮點數誤差,
關於這個問題可以你嘗試在C++輸出 int((0.3-0.2)*10) ,
在數學上計算應該為 int((0.3-0.2)*10) = int(0.1*10) = int(1) = 1 ,
但會發現實際上輸出的會是 0 ,
這是因為C++(其實不只C++)對於浮點數運算會有誤差,
所以實際上C++對於0.3-0.2計算的結果並不是0.1而是0.0999999999... ,
這就對於在無條件捨去(進位)上就會造成影響,
由於本提要求的是無條件捨去所以就很容易受到浮點數誤差的引響,
以上主要就是會WA的原因~
我的做法是不要使用double做輸入,
而是讀入2個int再做計算和判斷,
當然中途也都是使用整數運算而非浮點數運算~
以上提供你參考~
希望有幫助到你~ OwO