1.
double 与0比较时有个精度问题,有时需精确到小数点后面几位,例如与>0.0001,而不能与>0比较
例如杭电1408
盐水的故事
ac
#include<iostream>
using namespace std;
int main()
{
double vul,d;
int sum;
int n;
while(cin>>vul>>d)
{
sum=0;
n=1;
while(vul>d*n)
{
sum=sum+n+1;
vul=vul-d*n;
n++;
}
while(vul>0.001)//此处最小精度得>0.001,不能为while(vul>0)
{
vul=vul-d;
sum++;
}
cout<<sum<<endl;
}
return 0;
}
盐水的故事
ac
#include<iostream>
using namespace std;
int main()
{
double vul,d;
int sum;
int n;
while(cin>>vul>>d)
{
sum=0;
n=1;
while(vul>d*n)
{
sum=sum+n+1;
vul=vul-d*n;
n++;
}
int k=vul/d;
sum=sum+k;
if((vul/d)-k < 0.000001) ;
else
sum=sum+1;
/*while(vul>0)
{
vul=vul-d;
sum++;
}*/
cout<<sum<<endl;
}
return 0;
}
2.
double与long long哪个更大?
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;
double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
long long :-922337203685775808~922337203685775807 共18位,