C.绝命沙虫
- 确实绝了我老命,每次碰到卡精度的东西冲不过去都会直接开摆 这次算是涨了记性,仔细看了一下double的精度问题才发现,double类型在计算时会转化为二进制故有损失,例如 double a = 3.0-2.6结果是0.3999999999999999,这就是精度损失故(m-1)是double类型也会有精度损失
- 从此以后碰到卡精度的一律依靠*10将其化为整型再计算
using namespace std;
typedef long long ll;
ll n,t,ans,inf = 10000;
double m;
int main()
{
cin>>t;
while(t--){
cin>>n>>m;
ans=0;
ll num = n,a=0,b=0;//a是红,b是绿
ll mm=m*10;
while(num){
a=num*100;
b=min(inf,num*10*(mm-10));
ans+=floor(a/10);
ans+=floor(b/10);
num=floor(a/200);
}
cout<<ans<<endl;
}
return 0;
}