使用long double时错误的ans,使用double时更正

时间:2015-05-31 01:54:05

标签: c++

当我将ans声明为double并在printf中使用“%Lf”时,我总是得到-0.000作为输出。但是当我宣布ans为double并在printf中使用“%lf”时,我得到了正确的答案

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
#define ll long long int
int main()
{
    ll i,j,k,n,l,a[100000],ma;
    cin>>n>>l;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    ma=0;
    for(i=1;i<n;i++)
    {
        if(a[i]-a[i-1]>ma)ma=a[i]-a[i-1];
    }
    ll ans1,ans2;
    ans1=a[0];
    ans2=l-a[n-1];
    long double ans=max(ans1,ans2);
    long double rap=ma/2.000;
    if(rap>ans)ans=rap;
    printf("%Lf",ans);
    return 0;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

问题出在您的上一个prinft("%Lf", ans);函数中。您指定格式Lf,因此当您尝试传递double时,它会失败。使用cout代替解决问题,或者只使用f作为printf格式。顺便说一句,您的代码“失败”为double,而“工作”代表long double,而不是相反。