keys

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位,









posted @ 2014-07-17 14:29  gongpixin  阅读(183)  评论(0编辑  收藏  举报