#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